<?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, Desarrollo de Software</title><link>http://msmvps.com/blogs/lopez/archive/tags/Inteligencia+Artificial/Desarrollo+de+Software/default.aspx</link><description>Tags: Inteligencia Artificial, Desarrollo de Software</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Generación de Código e Inteligencia Artificial</title><link>http://msmvps.com/blogs/lopez/archive/2011/05/31/code_2D00_generation_2D00_and_2D00_artificial_2D00_intelligence.aspx</link><pubDate>Tue, 31 May 2011 10:28:17 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1794012</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=1794012</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2011/05/31/code_2D00_generation_2D00_and_2D00_artificial_2D00_intelligence.aspx#comments</comments><description>&lt;p&gt;&lt;img style="margin:0px 20px 20px 0px;display:inline;" align="left" src="http://www.ajlopez.com/images/articles2/ai01.jpg" alt="" /&gt; A finales de los setenta y principios de los ochenta (ya en el siglo pasado ;-)) estuve aprendiendo de todo sobre programación, lenguajes de programación y ciencia de la computación en general. Eran los días de COBOL, BCPL, ensamblador de IBM/360, JCL (Job Control Language), tarjetas perforadas, sistemas operativos Pick, Algol/W, Fortran, PL/I, y C (mi preferido) (en CP/M, DOS, Unix/Xenix). Uno de mis temas preferidos (entonces y ahora) era la Inteligencia Artificial, un término amplio (aún más en estos días). Esos días fueron la época dorada de los sistemas expertos (recuerdo Mycin, EMycin, el configurador automático de DEC, y otros). En ese entonces, estuve escribiendo montones de código C, entonces, como programador perezoso que soy, comencé a escribir mis propios utilitarios en C para generar más programas C ;-). Desde entonces que tengo na idea:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;La Generación de Código debe ser una aplicación de Inteligencia Artificial&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Hacia finales de los ochenta, principio de los noventas, el monto de código a escribir para tener una aplicación profesional fue disminuyendo (nuevas IDEs, “wizards” y librerías). Pero fue un estado transitorio: la complejidad impuesta por el mercado, por los requerimientos de los clientes, la aparición de aplicaciones en línea, concurrencia en todo, nuevas tecnologías y lenguajes (Windows, GUIs…) todo conspiró para el aumento del esfuerzo que debe ser empleado para cualquier aplicación no trivial. Abracé a Java a mitad de los 90, y luego a .NET en 2001. Grandes librerías de clase, nuevos trucos, estilos arquitectónicos, patrones, JSP, JSF, MVC, ASP.NET, Javascript, Ajax, algo de PHP, computación distribuida, capas físicas, escalabilidad, seguridad, rendimiento, …. De nuevo, el desarrollode software se transformó en ámbito complejo. Y ahora, tenemos mobile, Android, Windows Phone 7, ASP.NET MVC, nuevos JDKs, JVMs, lenguajes dinámicos… Podría continuar enumerando tecnologías sin por siempre… ;-)&lt;/p&gt;  &lt;p&gt;Por eso, al comienzo de este siglo, decidí comenzar my proyecto de generación de código, &lt;a href="http://ajgenesis.codeplex.com/"&gt;AjGenesis&lt;/a&gt;. Primero, éste es el proceso actual que uso en mis proyectos:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.ajlopez.com/images/articles2/ajgenesisai01.png" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;(Jeje… Ok, son un desarrollador, no un diseñador ;-))&lt;/p&gt;  &lt;p&gt;Los modelos de partida (a la izquierda) son de libre definición: uno puede usar el modelo que quiera y le convenga, no están “fijos”. Esta es una decisión clave: yo quiero que podamos tener la libertad para comenzar con cualquier modelo que elijamos como base para nuestra generación de código. Pero es importante destacar: debe haber un MODEL. No es sólo generación de código: lo que propugno es GENERACION DE CODIGO DESDE UN O VARIOS MODELOS. Usualmente, tengo un modelo abstracto, como:&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Project&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;AjApp&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Description&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Building an Application using AjGenesis&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Description&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Model&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Entities&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
			&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Entity&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Entities/Customer.xml&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
			&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Entity&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Source&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Entities/Supplier.xml&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Entities&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Model&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Project&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;y uno o más modelos dependientes de la tecnología como:&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,courier,monospace;font-size:12px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Technology&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Programming&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Dialect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;CSharp4NhMvc&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Dialect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Programming&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Database&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Dialect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;MsSql&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Dialect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;AjTestNh&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Host&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;.\SQLEXPRESS&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Host&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Database&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;NHibernate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Dialect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;NHibernate.Dialect.MsSql2000Dialect&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Dialect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;NHibernate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Technology&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;(más información en mis &lt;a href="http://ajlopez.wordpress.com/category/ajgenesis/"&gt;AjGenesis posts&lt;/a&gt; (en inglés) y &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/AjGenesis/default.aspx"&gt;mis posts&lt;/a&gt; (en español)). Los modelos se pueden escribir en XML o en texto. O podemos usar nuestros propios modelos (ver &lt;a href="http://ajlopez.wordpress.com/2010/02/27/models-for-code-generation-in-ajgenesis/"&gt;Models for Code Generation in AjGenesis&lt;/a&gt;, &lt;a href="http://msmvps.com/blogs/lopez/archive/2010/03/12/modelos-para-generaci-243-n-de-c-243-digo-en-ajgenesis.aspx"&gt;Modelos para Generación de Código en AjGenesis&lt;/a&gt;). Los artefactos de texto pueden ser Java, C#, VB.NET, Ruby, cualquiera que necesitemos. Como ejemplo de lo flexible que es este “approach”: cuando comencé con los ejemplos de AjGenesis generé PHP y JSP 1.x. Desde entonces, prácticamente sin cambiar esencialmente el proceso, pude generar para PHP (nuevas versiones), Java, JSP 2.x, Hibernate, NHibernate, ASP.NET 1.x, ASP.NET 2.x, ASP.NET MVC… Pude adaptarme a cualquier tecnología basada en código. Para conseguir tal flexibilidad, no hay IDE asociada en el proyecto. Tiene una interfaz espartana, pero me gusta. Me permite ir explorando nuevos caminos, sin estar anclado a una IDEA, aunque hace menos atractivo su uso.&lt;/p&gt;

&lt;p&gt;Desde su concepción, adopté un lenguaje dinámico, AjBasic, para soportar tareas y “templates” (plantillas): yo no quería SOLAMENTE un motor de transformaciones, de un modelo a código mediante plantillas. Quería tener el poder de un lenguaje GENERAL, pero que a la vez permita manejar obj.Propiedad, sobre un objeto no tipado de antemano: los objetos son tan maleables como los modelos iniciales, que son tratados accedidos como objetos. ¿Por qué un lenguaje general, y no uno que sólo soporte algún if y for a nivel de templates? PARA SOPORTAR LA EXTENSIBILIDAD, más allá de la expansión de plantillas. Y para poder acceder a toda la librería .NET (uno no debe desperdiciar una librería de clases cuando la encuentra). Y ¿para qué más? Sorpresa! Para ….. soportar Inteligencia Artificial!&lt;/p&gt;

&lt;p&gt;Afirmo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La Generación de Código desde un Modelo puede ser implementada como un Sistema Experto, y entonces, es una clara aplicación para Inteligencia Artificial&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gráficamente:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.ajlopez.com/images/articles2/ajgenesisai02.png" alt="" /&gt; &lt;/p&gt;

&lt;p&gt;Podemos ver a los desarrolladores de software como expertos humanos. Podemos “destilar” su experiencia y colocarla en sistemas expertos, agregdos al proceso de generación de código. Algunos ejemplos:&lt;/p&gt;

&lt;p&gt;- Un sistema experto peude usar un motor de reglas para tomar decisiones, pequeñas, medianas o grandes. Una pequeña: “El reporte web puede tener muchas filas, necesitamos paginación, filtro, y ordenar por tales columnas, que son las más importantes para este dominio… “. Y entonces, alguna parte del sistema parte recomendaría: “Sí! Podemos usar JQuery y JQuery.UI, hacer filtro del lado del servidor, servir los datos desde este acceso Ajax… etc…”… y otra parte (sí, el sistema experto podría ser “multi-mente” ;-)) diría “No! Necesitamos filtro del lado del servidor, y necesitamos estas consultas y servicios para cumplirlos, y estos puntos de acceso Ajax y … “ ¿Se capta la idea?&lt;/p&gt;

&lt;p&gt;Una micro-decisión que empleé el año pasado en un proyecto real: algunas entidades en el modelo abstracto fueron marcadas con el atributo “massive” (masiva) indicando: “tenemos gran cantidad de instancias de la entidad X en el sistema”. Entonces, cuando en la interfaz de usario necesitamos seleccionar una de esas entidades X, en vez de presentar una lista desplegable, el motor de generación de código (con lenguaje general que decide con if, funciones y rutinas) colocó una caja de texto de búsqueda, con auto-complete, y un servicio Ajax en el servidor. &lt;/p&gt;

&lt;p&gt;Podría usar para el modelo abstracto una ontología de base sobre la cual poder hacer inferencias y tomar decisiones. Ejemplo:&lt;/p&gt;

&lt;p&gt;- Cada entidad puede ser: una persona, una compañía, un lugar, un bien físico, un evento, un documento. Entonces, el sistema experto podría inferir: un lugar físico tiene una dirección; un bien físico debe ser guardado en un lugar físico; un documento X debe ser necesario para representar el movimiento de un bien físico de un lugar a otro; una persona puede ser un empleado; cada empleado tiene seguridad social… etc…. etc.. Entonces, cuando necesitamos un reporte de los eventos X, podemos inferir: los necesitamos ordenados por fecha, agrupados por lugar físico, etc..… etc… Tal documento tiene un total de moneda, sería interesante tener reportes agrupados por distintos criterios (por ejemplo, por parte involucrada en ese documento, un cliente, una compañía, una persona). Y por mes. Ah! Y necesitamos un gráfico de torta, y … y así, así… ;-)&lt;/p&gt;

&lt;p&gt;Podría agregar un motor de reglas para tomar algunas de estas decisiones, con reglas tipo “si la entidad X es masiva y la interfaz de usuario es web y podemos usar JQuery entonces… “. O reglas como: “si la entidad X hereda de la entidad Y y necesitamos persistencia, podemos adoptar la estrategia tabla-por-jerarquía. O tal vez alguna otra parte del sistema experto recomiendo tabla-por-clase-concreta. Y de ahí, generar los mapeos, la base de datos”. O: “esta entidad X es un documento que tiene una fecha; necesitamos agregar un índice sobre esta columna fecha/hora”. Es una forma de poner explícitamente las razones por las que tomamos decisiones como ésa cada día. Actualmente, en el proceso de AjGenesis, muchas de esas decisiones están en las tareas y en pistas que quedan en los modelos abstractos y de tecnologías. Pero bien podrían colocarse a nivel del sistema experto.&lt;/p&gt;

&lt;p&gt;Como gran panorama, la generación de código desde un modelo involucra: &lt;/p&gt;

&lt;p&gt;- Tenemos este punto de partida: modelos abstractos, modelos técnicos (con restriccionos como “este sistema lo necesitamos en ASP.NET MVC 3”)&lt;/p&gt;

&lt;p&gt;- Esta es el entregable esperado (algún sistema ya armado parcialmente, que sirvió como prueba de concepto de las tecnologías que vamos a usar)&lt;/p&gt;

&lt;p&gt;- Y tenemos todo este conocimiento experto destilado de la experiencia de nuestros desarralloradores, buenas prácticas, patrones...&amp;#160; Y con todo esto podemos ir desde el comienzo hasta el final esperado, aprovechando el conocimiento acumulado, configuraciones de ORM, librerías de inyección de dependencias, patrones de UI, patrones de implementación, conocimiento en la creación de bases de datos normalizadas, etc..&lt;/p&gt;

&lt;p&gt;El desarrollo de software y su arquitectura está relacionados con:&lt;/p&gt;

&lt;p&gt;- Conocer lo que necesitamos obtener
  &lt;br /&gt;- Conocer cuales son los problemas a resolver (persistencia, concurrencia, seguridad, rendimiento, traza, interfaz usable por el usuario, etc…) 

  &lt;br /&gt;- Conocer cuales son las soluciones disponibles (base de datos relacionales, bases NoSQL, lenguajes de programación, librerías de clases, frameworks, tecnologías de interfaz de usuario, patrones de todo tipo…)&lt;/p&gt;

&lt;p&gt;La generación de código desde un modelo tiene (para mí un gran) beneficio: pone en claro la existencia, SEPARACION y RELACIONES entre todos los puntos de arriba. En general, aprendemos todo eso pero centrados en una o dos tecnologías. Y cada problema viene mezclado con su solución. Y cada decisión nos viene “acoplada” a detalles técnicos, nos entretenemos en cada árbol, sin poder ver el bosque. &lt;/p&gt;

&lt;p&gt;Otro camino a explorar (que inicialmente lo quise explorar para &lt;a href="http://msmvps.com/blogs/lopez/archive/2008/03/31/ajgo-hacia-un-programa-que-juegue-al-go.aspx"&gt;AjGo&lt;/a&gt;, mi código de soporte para investigar formas de jugar al Go): el uso de agentes expertos. ¿Qué significa “agente experto” en ésta, mi jerga? Mi visión: tener módulos, agentes que pueden ser agregados y removidos sin mayor esfuerzo, que puedan resolver problemas. Alguien podría desarrollar un agente experto en JavaServer Faces. Podría ser que alguien tenga un agente especialista en el nuevo ASP.NET MVC 6.6, o en el JSF 17.2, o en el nuevo “SuperDuperOpenSourceUIThatIsTheNextBigThingHere”. No impoirta, siempre podemos adoptar NUEVAS SOLUCIONES a PROBLEMAS SIMILARES (ingresar la factura en una interfaz, consultar el estado de tal tema, realizar operaciones), habiendo destilado el nuevo conocimiento y “envasádolo” en un nuevo agente experto.&lt;/p&gt;

&lt;p&gt;Ok, todas estas son razones para un (¿próximo?) AjRules ;-). Y la justificación de mi trabajo con AjLisp (&lt;a href="http://ajlopez.wordpress.com/category/ajlisp"&gt;see here&lt;/a&gt;) y algo del código de un viejo AjProlog a ser portado a .NET (ver algo en &lt;a href="http://code.google.com/p/ajcodekatas/"&gt;AjCodeKatas&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Otros posts relacionados con el tema:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://msmvps.com/blogs/lopez/archive/2009/03/22/modelo-decisiones-inteligencia-artificial-y-ajgenesis.aspx"&gt;Modelos, decisiones, Inteligencia Artificial en AjGenesis&lt;/a&gt; 

  &lt;br /&gt;&lt;a 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;/p&gt;

&lt;p&gt;Imagen tomada de &lt;a href="http://www.nicepedia.com/information-technology/artificial-intelligence-introduction-application-part-i/"&gt;Artificial Intelligence, Introduction &amp;amp; Application (Part I)&lt;/a&gt;&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;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=1794012" 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>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>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>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>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>3</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>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></channel></rss>