<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ubicuos.com &#187; ia</title>
	<atom:link href="http://www.ubicuos.com/tag/ia/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ubicuos.com</link>
	<description>Tecnología,Programación, Proyectos, Ciencia y Empresas</description>
	<lastBuildDate>Tue, 06 Sep 2011 01:01:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Problema de 8 puzzle Busqueda Informada en Lisp</title>
		<link>http://www.ubicuos.com/2010/03/24/problema-de-8-puzzle/</link>
		<comments>http://www.ubicuos.com/2010/03/24/problema-de-8-puzzle/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 01:16:03 +0000</pubDate>
		<dc:creator>JRivero</dc:creator>
				<category><![CDATA[Cómputo Evolutivo]]></category>
		<category><![CDATA[computación]]></category>
		<category><![CDATA[evolutiva]]></category>
		<category><![CDATA[ia]]></category>
		<category><![CDATA[puzzle]]></category>

		<guid isPermaLink="false">http://www.ubicuos.com/?p=773</guid>
		<description><![CDATA[Cuentále a tus amigos en Facebook Es un problema clásico en la rama de la Inteligencia Artificial, aunque el problema parece de cierta manera trivial en la forma de entender y de plasmar en un lenguaje de programación, es sin embargo de cierta compledidad en la hora de resolverlo computacionalmente, iniciaremos dando una breve descripción [...]]]></description>
			<content:encoded><![CDATA[<div align="left" style="padding: 0px 5px 5px 0px; clear: left; float: left;"><a name="fb_share" type="button_count" share_url="http://www.ubicuos.com/2010/03/24/problema-de-8-puzzle/">Cuentále a tus amigos en Facebook</a></div><div class="tweetmeme_button" style="float: left; margin-left: 10px;width:90px">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.ubicuos.com%2F2010%2F03%2F24%2Fproblema-de-8-puzzle%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.ubicuos.com%2F2010%2F03%2F24%2Fproblema-de-8-puzzle%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Es un problema clásico en la rama de la Inteligencia Artificial, aunque el problema parece de cierta manera trivial en la forma de entender y de plasmar en un lenguaje de programación, es sin embargo de cierta compledidad en la hora de resolverlo computacionalmente, iniciaremos dando una breve descripción del problema, y posteriormente veremos las técnicas comunes que son usadas para resolver este juego. sin mas preámbulo iniciaremos con el problema.</p>
<h1><span style="color: #003366;">Descripción</span></h1>
<p>Tratamos de resolver un juego de puzzle con 9 casillas para el caso del 8-puzzle, en la cual 8 están llenas de algún elemento (Imagen, Numero, Letra, etc)  y la novena casilla se encuentra vacía, esto sirve para hacer movimientos de manera horizontal o vertical, el objetivo es llegar de un estado inicial a un estado meta (Solución).</p>
<p style="text-align: left;">Estado Inicial, Estado Meta A y Estado Meta B respectivamente.</p>
<p><img class="size-full wp-image-776  alignleft" title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /></p>
<p><img class="size-full wp-image-777    alignnone" title="8_puzzle_goal_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_goal_state_a.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-815" title="8_puzzle_goal_state_b" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_goal_state_b.png" alt="" width="127" height="127" /></p>
<p><span id="more-773"></span>Debemos notar que al mover una ficha de posición generamos un nuevo estado la cual tenemos que analizar, así moviendo las fichas de lugar en diferentes formas llegaremos al estado meta -sin embargo no todo esto es cierto- existe un problema en el juego de puzzle llamado <em><strong>error de paridad</strong></em> (Muy similar al error de paridad de las comunicaciones electrónicas). Por lo tanto no siempre desde cualquier estado inicial, podemos llegar a un estado meta.</p>
<h2><span style="color: #003366;">Error de paridad</span></h2>
<p>Antes de entender el error de paridad necesitamos plantear el concepto de <em><strong>inversión</strong></em> que <strong><em>depende del Estado Meta a llegar</em></strong>, por lo cual tomaremos nuestro Estado inicial y Estado Meta B respectivamente:</p>
<p><img class="alignnone size-full wp-image-776" title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-815" title="8_puzzle_goal_state_b" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_goal_state_b.png" alt="" width="127" height="127" /></p>
<p>Llamamos inversión a la violación del orden de la posición de acuerdo a su valor &#8220;per se&#8221;, en otras palabras un numero mayor se encuentra justamente detrás de un numero menor, en el estado ilustrado anteriormente tenemos:</p>
<address>2 se encuentra detrás del 1</address>
<address>8 se encuentra detrás del 3, 1, 6, 4, 7 y 5</address>
<address>3 se encuentra detrás del 1</address>
<address>6 detrás del 4 y 5</address>
<address>Y por ultimo 7 detrás del 5</address>
<p>Esto nos da un total de inversiones de 11, un numero impar.</p>
<p>De otra forma tenemos el Estado Inicial y el Estado Meta A:</p>
<p><img class="alignnone size-full wp-image-776" title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-777" title="8_puzzle_goal_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_goal_state_a.png" alt="" width="127" height="127" /></p>
<p>Usando la misma logica pasada tenemos que:</p>
<address>2 se encuentra detrás del 1</address>
<address>8 se encuentra detrás del 1 y 3</address>
<address>3 se encuentra detrás del 1</address>
<address>6 se encuentra detrás del 4 y 7</address>
<p>Con un total de 6 inversiones un numero par.</p>
<p>Como podra ya suponerse, el error de paridad depende exclusivamente del total de inversiones, ya que si es un numero par tiene solución, de lo contrario es imposible llegar al Estado Meta.</p>
<h1><span style="color: #000080;"><span style="color: #003366;">Búsqueda</span><br />
</span></h1>
<p>Dado que al cambiar una ficha de posición estamos generando un nuevo estado, podemos ver el problema del puzzle en forma de arbol, en la que cada nodo es un estado del puzzle generado por un padre (Excepto el nodo raíz, el cual es el estado inicial), y cada nodo hijo es un nuevo estado generado a partir del movimiento de las fichas, por ejemplo:</p>
<p><img class="alignnone size-medium wp-image-856" title="arbol_puzzle" src="http://www.ubicuos.com/wp-content/uploads/2010/03/arbol_puzzle-300x211.jpg" alt="" width="300" height="211" /></p>
<p>Existen principalmente dos tipos de búsqueda para resolver el problema del puzzle y claro entre otros.</p>
<ul>
<li>Búsqueda a Ciegas (No informada)
<ul>
<li>Fuerza Bruta (Sin orden en particular)</li>
<li>Ordenada (Estrategia de orden)
<ul>
<li>Depth-first (Expandir en profundidad)</li>
<li>Breath-first (Expandir en anchura)</li>
<li>Iterative Deeping Search (Una combinación de las estrategias anteriores)</li>
</ul>
</li>
</ul>
</li>
<li>Búsqueda Contextual (Informada)
<ul>
<li>Selectiva (Estrategias de expansión)
<ul>
<li>Best-first</li>
<li>A*</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1><span style="color: #003366;"><span style="color: #003366;">Algoritmo Best-First</span><br />
</span></h1>
<p>La búsqueda usada en este problema fue de manera contextual y con estrategia de expansión de Best-First.</p>
<p>Los métodos de búsqueda contextual no se ajustan a un orden fijo para expandir los estados, sino que, para tomar la decisión, incorporan una función de evaluación ƒ<em>(x) la cual se compone de dos partes:</em></p>
<p><em>ƒ(x) = g(x) + h(x)</em></p>
<p><span style="text-decoration: underline;"><em>Función de Costo Estimado y función de aptitud</em></span></p>
<p><em>h(x)</em> es una función que evalúa el estado x en cuanto a su parecido con el estado meta.</p>
<p><em>g(x)</em> evalúa la dificultad, en terminos del espacio de estados representados, de llegar hasta el estado x, o bien, la dificultad restante hasta llegar a un estado meta, esta componente de la funcion es usada usualmente en el algoritmo A*.</p>
<p>En lugar de expandir siempre un profundidad (Depth-first), siempre en anchura (Breath-first), o una combinación (Iterative Deeping Search), este algoritmo expande, en cada ocasión, el estado mas &#8220;prometedor&#8221;.</p>
<p>La función de evaluación heurística determina cuál es el nodo a expandir.</p>
<h2><span style="color: #003366;">Función de Aptitud</span></h2>
<p>Existen dos funciones de aptitud tradicionalmente usadas para este problema en particular, ambas funciones de aptitud miden las diferencia entre el estado evaluado y el estado meta.</p>
<p>Estado Meta usado</p>
<p><img title="8_puzzle_goal_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_goal_state_a.png" alt="" width="127" height="127" /></p>
<ul>
<li>El numero de fichas colocadas de manera incorrecta, <strong>basada en el estado meta</strong>.</li>
</ul>
<p><img class="alignnone" title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /><strong><em> </em></strong></p>
<p><strong><em>h(e)</em></strong> = Numero de fichas mal posicionadas<em><strong> </strong></em></p>
<p><em><strong>h</strong><strong>(e)</strong></em> = 4</p>
<ul>
<li>La suma de la distancia Manhattan (Suma Vertical y Horizontal), de  cada ficha a su posición del estado meta.</li>
</ul>
<p><img class="alignnone" title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /></p>
<p><em><strong>h(e)</strong></em> = ∑ i=1 to i=8 ( e(i), Estado Meta(i) )</p>
<p><em><strong>h(e)</strong> =1 + 1 + 2 + 1 = 5</em></p>
<h2><span style="color: #003366;">Pasos del  Algoritmo Best-First</span></h2>
<ol>
<li>Definir la  lista de estados a examinar (Lista <strong>OPEN</strong>), conteniendo  exclusivamente el estado inicial <strong>S</strong>.</li>
<li><span style="color: #003366;"><span style="color: #000000;">Si la lista <strong>OPEN</strong> está vacía, entonces <strong>NO HAY SOLUCIÓN </strong>y terminar.</span></span></li>
<li><span style="color: #003366;"><span style="color: #000000;">Extraer de la lista el siguiente estado (<strong>n</strong>) con <strong>mejor aptitud </strong>y moverlo a una lista de nodos ya examinados (<strong>CLOSED</strong>), dado que la lista debería estar siempre ordenada debemos seleccionar el primer estado.</span></span></li>
<li><span style="color: #003366;"><span style="color: #000000;">Expandir el estado <strong>n </strong>(<strong>En todas sus formas validas</strong>).</span></span></li>
<li><span style="color: #003366;"><span style="color: #000000;">Si algún sucesor de <strong>n</strong> es el estado meta, SOLUCIÓN y reconstruirla, de lo contrario.</span></span></li>
</ol>
<p>Para cada estado recién generado:</p>
<blockquote>
<ul>
<li style="padding-left: 30px;">Evaluar su aptitud con <em><strong>h(e)</strong></em>.</li>
<li style="padding-left: 30px;">En caso de que el estado<strong> no se encuentre en alguna de las dos listas</strong>, entonces añadirlo a <strong>OPEN</strong>.</li>
<li style="padding-left: 30px;">Ordenamos <strong>OPEN</strong></li>
<li style="padding-left: 30px;">Regresar al Paso 2</li>
</ul>
</blockquote>
<h1><span style="color: #003366;">Ejemplo simple<br />
</span></h1>
<p><span style="color: #000000;">Tenemos Estado Inicial y el Estado Meta respectivamente.</span></p>
<p><img title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /><img title="8_puzzle_goal_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_goal_state_a.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Paso 1, Insertar el estado inicial a la lista de <strong>OPEN</strong>.</span></p>
<h2><span style="color: #003366;">Lista OPEN</span></h2>
<p><img title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /></p>
<h2><span style="color: #003366;">Lista CLOSED</span></h2>
<p><span style="color: #003366;"><span style="color: #000000;">Vacía</span><span style="color: #333399;"><br />
</span> </span></p>
<p><span style="color: #003366;">Paso 2, verificar si la lista <strong>OPEN</strong> no esta vacía.</span></p>
<p><span style="color: #003366;">Paso 3 extraer de la lista <strong>OPEN</strong> el estado con mejor aptitud, en este caso como <strong>OPEN</strong> solo tiene un elemento,lo movemos a <strong>CLOSED</strong></span></p>
<h2><span style="color: #003366;">Lista  OPEN</span></h2>
<p><span style="color: #000000;">Vacía</span></p>
<h2><span style="color: #003366;">Lista  CLOSED</span></h2>
<p><img title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Paso 4, expendemos el estado.</span></p>
<p><img class="alignnone size-full wp-image-835" title="8_puzzle_start_state_1" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_1.png" alt="" width="127" height="127" /></p>
<p><span style="color: #000000;">Lo que nos da:</span></p>
<p><img class="alignnone size-full wp-image-836" title="8_puzzle_start_state_2" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_2.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-837" title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-838" title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Paso 5, ningún estado sucesor de (<strong>n</strong>) es el estado meta.</span></p>
<p><span style="color: #003366;">Paso 6, Usaremos la función aptitud de posiciones incorrectas, y tenemos sus  siguiente aptitudes respectivamente:</span><strong><em> <span style="color: #800000;">h1(e)</span></em><span style="color: #800000;"> </span><span style="color: #800000;">= 3, <em>h2(e)</em> = 5, <em>h3(e)</em> = 4</span></strong></p>
<p><span style="color: #000000;">Ninguno de los estados se encuentra en <strong>CLOSED ni en OPEN</strong>, por lo tanto metemos nuestros estados a la lista <strong>OPEN</strong>.</span></p>
<h2><span style="color: #003366;">Lista   OPEN</span></h2>
<p><img title="8_puzzle_start_state_2" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_2.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /></p>
<p><span style="color: #000000;">Ordenamos de acuerdo a su aptitud</span> <strong><em> <span style="color: #800000;">h1(e)</span></em><span style="color: #800000;"> </span><span style="color: #800000;">= 3, <em>h3(e)</em> = 4, <em>h2(e)</em> = 5</span>:</strong></p>
<h2><span style="color: #003366;">Lista    OPEN</span></h2>
<p><img title="8_puzzle_start_state_2" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_2.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /></p>
<h2><span style="color: #003366;">Lista   CLOSED</span></h2>
<p><img title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Repetimos el Paso 2, verificamos si la lista <strong>OPEN </strong>esta vacía.</span></p>
<p><span style="color: #003366;">Paso 3  extraer de la lista <strong>OPEN</strong> el estado con mejor aptitud. y lo  movemos a <strong>CLOSED</strong></span></p>
<h2><span style="color: #003366;">Lista   OPEN</span></h2>
<p><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /></p>
<h2><span style="color: #003366;">Lista  CLOSED</span></h2>
<p><img title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_2" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_2.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Paso  4, expendemos el estado.</span></p>
<p><img class="alignnone size-full wp-image-840" title="8_puzzle_start_state_5" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_5.png" alt="" width="127" height="127" /></p>
<p><span style="color: #000000;">Lo que nos da:</span></p>
<p><img class="alignnone size-full wp-image-841" title="8_puzzle_start_state_6" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_6.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-842" title="8_puzzle_start_state_7" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_7.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-847" title="8_puzzle_start_state_8" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_8.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-845" title="8_puzzle_start_state_9" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_9.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Paso  5, ningún estado sucesor de (<strong>n</strong>) es el estado meta.</span></p>
<p><span style="color: #003366;">Paso 6,  Usaremos la función aptitud de posiciones incorrectas, y tenemos sus   siguiente aptitudes respectivamente:</span><strong><em><span style="color: #003366;"> </span><span style="color: #800000;">h4(e)</span></em><span style="color: #800000;"> </span><span style="color: #800000;">= 3, <em>h5(e)</em> = 4, <em>h6(e)</em> = 4, <em>h7(e)</em> = 3</span></strong></p>
<p><span style="color: #000000;">Ya que</span><strong><em> <span style="color: #800000;">h6(e)</span></em></strong> <span style="color: #000000;">se encuentra en <strong>CLOSED </strong>no se insertara en la lista<strong> OPEN</strong>, por lo tanto solo metemos </span><strong><em><span style="color: #800000;">h4, h5, h7,</span></em></strong><span style="color: #800000;"> <span style="color: #000000;">lo que en la lista nos queda</span></span><span style="color: #000000;"><strong><em> </em></strong></span><span style="color: #800000;"><strong><em>h3</em></strong>, <strong><em>h2</em>, h4, h5, h7 </strong></span></p>
<h2><span style="color: #003366;">Lista   OPEN</span></h2>
<p><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_6" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_6.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_7" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_7.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-845" title="8_puzzle_start_state_9" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_9.png" alt="" width="127" height="127" /></p>
<p><span style="color: #000000;">Ordenamos de acuerdo a su aptitud</span> <strong><em> </em><strong><em> <span style="color: #800000;">h7(e)</span></em><span style="color: #800000;"> </span></strong><span style="color: #800000;">= 3, <strong><em>h4(e)</em> </strong>= 3, <strong><em>h5(e)</em> </strong>= 4, </span></strong><span style="color: #800000;"><strong><em>h3(e)</em> = 4, <em>h2(e)</em> = 5</strong></span></p>
<h2><span style="color: #003366;">Lista    OPEN</span></h2>
<p><img title="8_puzzle_start_state_9" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_9.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_6" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_6.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_7" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_7.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /></p>
<p><span style="color: #000080;">Repetimos  el Paso 2, verificamos si la lista <strong>OPEN</strong> esta vacía.</span></p>
<p><span style="color: #000080;">Paso 3   extraer de la lista <strong>OPEN</strong> el estado con mejor aptitud. y lo   movemos a <strong>CLOSED</strong></span></p>
<h2><span style="color: #003366;">Lista    OPEN</span></h2>
<p><img title="8_puzzle_start_state_6" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_6.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_7" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_7.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /></p>
<h2><span style="color: #003366;">Lista   CLOSED</span></h2>
<p><img title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_2" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_2.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_9" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_9.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Paso   4, expendemos el estado.</span></p>
<p><span style="color: #000080;"><img class="alignnone size-full wp-image-866" title="8_puzzle_start_state_10" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_10.png" alt="" width="127" height="127" /></span></p>
<p><span style="color: #000000;">Lo que nos da:</span></p>
<p><img class="alignnone size-full wp-image-867" title="8_puzzle_start_state_11" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_11.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-868" title="8_puzzle_start_state_12" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_12.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-869" title="8_puzzle_start_state_13" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_13.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Paso   5, ningún estado sucesor de (<strong>n</strong>) es el estado meta.</span></p>
<p><span style="color: #003366;">Paso 6,   Usaremos la función aptitud de posiciones incorrectas, y tenemos sus    siguiente aptitudes respectivamente:</span><strong><em> <span style="color: #800000;">h8(e)</span><span style="color: #800000;"> = 2, h9(e) = 3, h10(e) = 4</span></em></strong></p>
<p><span style="color: #000000;">Ya que</span><strong><em> <span style="color: #800000;">h9(e)</span></em></strong> <span style="color: #000000;">se encuentra en <strong>CLOSED </strong>no se  insertara en la lista<strong> OPEN</strong>, por lo tanto solo metemos</span> <strong><em><span style="color: #800000;">h8, h10</span>,</em></strong> <span style="color: #000000;">lo que en la lista  nos queda</span><strong><em> </em></strong><span style="color: #800000;"><strong>h4,  h5, h3, h2, h8, h10 </strong></span></p>
<h2><span style="color: #003366;">Lista     OPEN</span></h2>
<p><img title="8_puzzle_start_state_6" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_6.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_7" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_7.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_11" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_11.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_13" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_13.png" alt="" width="127" height="127" /></p>
<p><span style="color: #000000;">Ordenamos de acuerdo a su aptitud</span> <strong><strong><em><span style="color: #800000;"> </span></em><span style="color: #800000;"> </span></strong><span style="color: #800000;"> </span><em><strong><em> <span style="color: #800000;">h8(e)</span></em><span style="color: #800000;"> = 2, </span></strong><span style="color: #800000;">h4(e) = 3, h5(e) = 4, h3(e) = 4, h10(e) = 4,</span></em></strong><strong><em><span style="color: #800000;"> h2(e) = 5</span></em></strong></p>
<p><strong> </strong></p>
<h2><span style="color: #003366;">Lista      OPEN</span></h2>
<p><img title="8_puzzle_start_state_11" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_11.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_6" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_6.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_7" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_7.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_13" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_13.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Repetimos   el Paso 2, verificamos si la lista <strong>OPEN</strong> esta vacía.</span></p>
<p><span style="color: #003366;">Paso 3    extraer de la lista <strong>OPEN</strong> el estado con mejor aptitud. y lo    movemos a <strong>CLOSED</strong></span></p>
<h2><span style="color: #003366;">Lista      OPEN</span></h2>
<p><img title="8_puzzle_start_state_6" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_6.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_7" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_7.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_13" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_13.png" alt="" width="127" height="127" /></p>
<h2><span style="color: #003366;">Lista    CLOSED</span></h2>
<p><img title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_2" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_2.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_9" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_9.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_11" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_11.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Paso    4, expendemos el estado.</span></p>
<p><img class="alignnone size-full wp-image-873" title="8_puzzle_start_state_14" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_14.png" alt="" width="127" height="127" /></p>
<p><span style="color: #000000;">Lo que nos da:</span></p>
<p><img class="alignnone size-full wp-image-874" title="8_puzzle_start_state_15" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_15.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-880" title="8_puzzle_start_state_16" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_161.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Paso   5, ningún estado sucesor de (<strong>n</strong>) es el estado meta.</span></p>
<p><span style="color: #003366;">Paso 6,   Usaremos la función aptitud de posiciones incorrectas, y  tenemos sus    siguiente aptitudes respectivamente:</span><strong><em> <span style="color: #800000;">h11(e) = 1, h12(e) =  3</span></em></strong></p>
<p><span style="color: #000000;">Ya que</span><strong><em> <span style="color: #800000;"><em><strong>h12(e)</strong></em></span></em></strong> s<span style="color: #000000;">e encuentra en <strong>CLOSED </strong>no se   insertara en la lista<strong> OPEN</strong>, por lo tanto solo metemos </span><strong><em><span style="color: #800000;"><strong><em>h11</em></strong></span></em></strong> <span style="color: #000000;">lo que en la lista  nos queda</span><strong><em> </em></strong><strong><em><span style="color: #800000;"><strong>h4,  h5, h3, h2, h10. h11</strong></span></em></strong></p>
<h2><span style="color: #003366;">Lista      OPEN</span></h2>
<p><img title="8_puzzle_start_state_6" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_6.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_7" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_7.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_13" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_13.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_15" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_15.png" alt="" width="127" height="127" /></p>
<p><span style="color: #000000;">Ordenamos de acuerdo a su aptitud</span> <strong><strong><em> </em> </strong> <em><strong><em> </em></strong><span style="color: #800000;"><strong><em>h11(e) = 1, </em></strong></span></em></strong><span style="color: #800000;"><em><strong>h4(e) = 3,  h5(e) = 4, h3(e) = 4, </strong><strong>h10(e) = 4, </strong><strong>h2(e) = 5</strong></em></span></p>
<p><img title="8_puzzle_start_state_15" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_15.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_6" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_6.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_7" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_7.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_13" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_13.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Repetimos   el Paso 2, verificamos si la lista <strong>OPEN</strong> esta  vacía.</span></p>
<p><span style="color: #003366;">Paso 3    extraer de la lista <strong>OPEN</strong> el estado con  mejor aptitud. y lo    movemos a <strong>CLOSED</strong></span></p>
<h2><span style="color: #003366;">Lista      OPEN</span></h2>
<p><img title="8_puzzle_start_state_6" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_6.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_7" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_7.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_4" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_4.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_3" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_3.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_13" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_13.png" alt="" width="127" height="127" /></p>
<h2><span style="color: #003366;">Lista    CLOSED</span></h2>
<p><img title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_2" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_2.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_9" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_9.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_11" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_11.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_15" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_15.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Paso    4, expendemos el estado.</span></p>
<p><img class="alignnone size-full wp-image-882" title="8_puzzle_start_state_17" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_17.png" alt="" width="127" height="127" /></p>
<p><span style="color: #000000;">Lo que nos da:</span></p>
<p><img class="alignnone size-full wp-image-883" title="8_puzzle_start_state_18" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_18.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-884" title="8_puzzle_start_state_19" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_19.png" alt="" width="127" height="127" /><img class="alignnone size-full wp-image-885" title="8_puzzle_start_state_20" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_20.png" alt="" width="127" height="127" /></p>
<p><span style="color: #003366;">Paso   5, Un estado sucesor de (<strong>n</strong>) es el estado meta.</span></p>
<p><span style="color: #003366;">Reconstruimos la solución:</span></p>
<p><img title="8_puzzle_start_state_a" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_a.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_2" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_2.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_9" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_9.png" alt="" width="127" height="127" /></p>
<p><img title="8_puzzle_start_state_11" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_11.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_15" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_15.png" alt="" width="127" height="127" /><img title="8_puzzle_start_state_19" src="http://www.ubicuos.com/wp-content/uploads/2010/03/8_puzzle_start_state_19.png" alt="" width="127" height="127" /></p>
<h2><span style="color: #003366;">Conclusión</span></h2>
<p><span style="color: #003366;"><span style="color: #000000;">Con un poco de observación notaremos que solo 5 movimientos son necesarios para llegar del estado inicial al estado meta, sin embargo este ejemplo aunque parece simple, tiene varios detalles que contemplar como: las listas de <strong>OPEN</strong> y <strong>CLOSED </strong>van creciendo a un ritmo acelerado, tendríamos que reservar espacio en memoria para las dos listas, generar nuevos estados, comparar estado anteriores, ordenar la lista de <strong>OPEN</strong> para cada inserción de un nuevo estado, y generar aptitudes por cada estado, lo que hace que requiera un gran recurso de tiempo máquina. Llegando en ciertos lenguajes de programación imposible de llegar a una solución -Aunque esta exista-. </span></span></p>
<p><span style="color: #000000;">Una cosa mas que notar, es sobre la función de aptitud, ya que por lo  generar en este juego, la función de aptitud de Manhattan es increíblemente superior a la función de posiciones incorrectas.</span></p>
<p><span style="color: #000000;">El tamaño del espacio de búsqueda para el 8-puzzle es de 9!, esto es: 362,880 permutaciones, ahora supongamos que necesitamos resolver el 15-puzzle, el cual tiene 15!, lo que es equivalente a: 1,307,674,368,000 permutaciones!!!!</span></p>
<h2><span style="color: #003366;">Programa</span></h2>
<p><span style="color: #003366;"><span style="color: #000000;">Después de ver la descripción del problema, el algoritmo de búsqueda y un ejemplo, podemos ya probar el siguiente programa que resuelve el 8-puzzle y 15.puzzle, desarrollado en Common Lisp. Debo mencionar que el programa usa principalmente matrices para la solución, Claro que puede hacerse mucho mas simple y compacto el programa, sin embargo lo hice de esta manera para que fuera un poco mas didáctico y mas transparente para aquellos acostumbrados a C, por decir un ejemplo.</span></span></p>
<p><span style="color: #003366;"><span style="color: #000000;">Descargar:</span></span> <a href="http://www.ubicuos.com/wp-content/uploads/2010/03/8puzzle.zip">8puzzle</a></p>
<p><span style="color: #003366;"><span style="color: #000000;">Cualquier duda, comentario o critica es bien recibida.</span></span></p>
<p style="padding-left: 30px;"><img src="file:///tmp/moz-screenshot-4.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ubicuos.com/2010/03/24/problema-de-8-puzzle/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Assert con SWI-Prolog</title>
		<link>http://www.ubicuos.com/2009/07/16/assert-con-swi-prolog/</link>
		<comments>http://www.ubicuos.com/2009/07/16/assert-con-swi-prolog/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 03:20:09 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[ia]]></category>
		<category><![CDATA[prolog]]></category>

		<guid isPermaLink="false">http://www.ubicuos.com/?p=355</guid>
		<description><![CDATA[Cuentále a tus amigos en Facebook Este es un ejemplo de como usar assert con Prolog. % Author: Daniel Alejandro Doctor Soriano % Date: 23/02/2006 :-dynamic progenitor/2. progenitor&#40;juan, pedro&#41;. progenitor&#40;luis, ernesto&#41;. padre&#40;X,Y&#41;:-progenitor&#40;X,Y&#41;,write&#40;X&#41;,write&#40;' es el padre de '&#41;, writeln&#40;Y&#41;, fail. agrega_progenitor&#40;X,Y&#41;:-assert&#40;progenitor&#40;X,Y&#41;&#41;. agrega_progenitor&#40;marcos,andres&#41;. % assert agrega un nuevo hecho a la base de conocimiento % si escribimos [...]]]></description>
			<content:encoded><![CDATA[<div align="left" style="padding: 0px 5px 5px 0px; clear: left; float: left;"><a name="fb_share" type="button_count" share_url="http://www.ubicuos.com/2009/07/16/assert-con-swi-prolog/">Cuentále a tus amigos en Facebook</a></div><div class="tweetmeme_button" style="float: left; margin-left: 10px;width:90px">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F07%2F16%2Fassert-con-swi-prolog%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F07%2F16%2Fassert-con-swi-prolog%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>

<div class="wp_syntax"><div class="code"><pre class="prolog" style="font-family:monospace;">Este es un ejemplo de como usar assert con Prolog<span style="color: #339933;">.</span>
<span style="color: #666666; font-style: italic;">% Author: Daniel Alejandro Doctor Soriano</span>
<span style="color: #666666; font-style: italic;">% Date: 23/02/2006</span>
<span style="color: #339933;">:-</span><span style="color: #990000;">dynamic</span> progenitor<span style="color: #339933;">/</span><span style="color: #800080;">2</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>juan<span style="color: #339933;">,</span> pedro<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>luis<span style="color: #339933;">,</span> ernesto<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
padre<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>Y<span style="color: #009900;">&#41;</span><span style="color: #339933;">:-</span>progenitor<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>Y<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #990000;">write</span><span style="color: #009900;">&#40;</span>X<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #990000;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">' es el padre de '</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> writeln<span style="color: #009900;">&#40;</span>Y<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">fail</span><span style="color: #339933;">.</span>
agrega_progenitor<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>Y<span style="color: #009900;">&#41;</span><span style="color: #339933;">:-</span>assert<span style="color: #009900;">&#40;</span>progenitor<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>Y<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
agrega_progenitor<span style="color: #009900;">&#40;</span>marcos<span style="color: #339933;">,</span>andres<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
<span style="color: #666666; font-style: italic;">% assert agrega un nuevo hecho a la base de conocimiento</span>
<span style="color: #666666; font-style: italic;">% si escribimos asserta lo agrega al &quot;inicio de la base&quot;</span>
<span style="color: #666666; font-style: italic;">% si escribimos assertz lo agrega &quot;al final de la base&quot;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.ubicuos.com/2009/07/16/assert-con-swi-prolog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lisp en Javascript</title>
		<link>http://www.ubicuos.com/2009/06/03/lisp-en-javascript/</link>
		<comments>http://www.ubicuos.com/2009/06/03/lisp-en-javascript/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 03:45:55 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[ia]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[parser]]></category>

		<guid isPermaLink="false">http://www.ubicuos.com/?p=229</guid>
		<description><![CDATA[Para demostrar que tan potente puede ser JavaScript como un lenguaje de programación (a lo opuesto de un lenguaje de scripting embebido), Joe Ganley escribió un intérprete de Lisp en Javascript.]]></description>
			<content:encoded><![CDATA[<div align="left" style="padding: 0px 5px 5px 0px; clear: left; float: left;"><a name="fb_share" type="button_count" share_url="http://www.ubicuos.com/2009/06/03/lisp-en-javascript/">Cuentále a tus amigos en Facebook</a></div><div class="tweetmeme_button" style="float: left; margin-left: 10px;width:90px">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F06%2F03%2Flisp-en-javascript%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F06%2F03%2Flisp-en-javascript%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Visto en <a href="http://www.joeganley.com/code/jslisp.html">http://www.joeganley.com/code/jslisp.html</a></p>
<p>Para demostrar que tan potente puede ser JavaScript como un lenguaje de programación (a lo opuesto de un lenguaje de scripting embebido), Joe Ganley escribió un intérprete de Lisp en Javascript</p>
<p>Resultó ser bastante bueno, para este proyecto, dado que es flexible &#8211; los arreglos de tamaño dinámico son usados ampliamente- y los arreglos asociativos funcionan como una buena tabla de símbolos. </p>
<p>Un número de instrucciones de Lisp son implementadas, la sintaxis es estándar y solamente maneja aritmética de enteros.</p>
<p>Sin embargo eso no le quita el mérito y lo interesante que puede ser tanto Javascript como Lisp.</p>
<p>Visto en <a href="http://www.joeganley.com/code/jslisp.html#Copy">http://www.joeganley.com/code/jslisp.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ubicuos.com/2009/06/03/lisp-en-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La Vida Artificial</title>
		<link>http://www.ubicuos.com/2009/05/31/la-vida-artificial/</link>
		<comments>http://www.ubicuos.com/2009/05/31/la-vida-artificial/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 00:59:57 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Ciencia]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[evolutivo]]></category>
		<category><![CDATA[ia]]></category>
		<category><![CDATA[inteligencia artificial]]></category>

		<guid isPermaLink="false">http://www.ubicuos.com/?p=212</guid>
		<description><![CDATA[La Vida Artificial pretende modelar el comportamiento que siguen los seres vivos durante su desarrollo y al relacionarse entre ellos y con su entorno. En su estudio se distinguen dos lineas; el diseño de seres virtuales y el de ecosistemas virtuales.]]></description>
			<content:encoded><![CDATA[<div align="left" style="padding: 0px 5px 5px 0px; clear: left; float: left;"><a name="fb_share" type="button_count" share_url="http://www.ubicuos.com/2009/05/31/la-vida-artificial/">Cuentále a tus amigos en Facebook</a></div><div class="tweetmeme_button" style="float: left; margin-left: 10px;width:90px">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F05%2F31%2Fla-vida-artificial%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F05%2F31%2Fla-vida-artificial%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Marzo 2001</p>
<p>Paola Neri Ortiz (http://www.geocities.com/paolaneriortiz/main.htm)</p>
<h2>Introducción</h2>
<p>Desde la aparición de las primeras computadoras,     el hombre ha soñado con implementar sistemas que sean capaces de reaccionar     de manera similar a la de un ser vivo. Así se crea la Vida Artificial     la cual pretende modelar el comportamiento que siguen los seres vivos durante     su desarrollo y al relacionarse entre ellos y con su entorno. En su estudio     se distinguen dos lineas; el diseño de seres virtuales y el de ecosistemas     virtuales.<span id="more-212"></span></p>
<p>Como ejemplo de programacion de seres virtuales     tenemos al presentado en octubre de 1993, en el VI Congreso Internacional de     Informática y Computación por las maestras Angélica García     V., Angélica Muñoz Meléndez y el Dr. José Negrete     llamado &#8220;Propuesta de un Mundo Sintético Fundado en Metodologías     Basadas en el Comportamiento&#8221;. Un trabajo que simula el desarrollo de una     criatura en su medio ambiente y el proceso de adaptación al mismo. Para     realizar este proyecto, se dotó de atributos a un ser sintético     y se le programó para ser capaz de reconocer los elementos que forman     parte del espacio creado para él (como agua, tierra y comida) y &#8220;reaccionar&#8221;     de manera distinta ante cada uno de estos elementos.</p>
<p>Un ejemplo de ecosistema virtual es El juego     de la vida, un problema clásico de la programación creado en 1970     por John H. Conway, el cual intenta modelar el desarrollo de una población     con el uso de puntos llamados &#8220;células&#8221;, los cuales interaccionan     usando tres reglas preestablecidas que son:</p>
<ol>
<li>Cada elemento permanece vivo, si tiene dos     o tres vecinos (necesita compañía para vivir).</li>
<li>Un elemento muere, si tiene más de tres vecinos (por sobrepoblación).</li>
<li>Un elemento nace, en un espacio vacío, si tiene exactamente tres vecinos.</li>
<li>Cada elemento tiene la posibilidad de rodearse de un máximo     de ocho elementos vecinos (Vecindad de Moore).</li>
</ol>
<p>El juego de la vida no es el único ejemplo,     otros sistemas como presa-depredador, peces en un cardúmen y sistema     inmunológico también son problemas clásicos en el modelado     de Vida Artificial.</p>
<p>Cuando John H. Conway creo el juego de la vida,     muchos programadores se emocionaron al ver cuantos patrones de movimiento podían     encontrarse al cabo de algunas iteraciones. Los desplazamientos en &#8220;manada&#8221;,     surgen a la vista sin una aparente programación previa. Es decir, uno     de los elementos mas esperados en la vida artificial es precisamente lo que     &#8220;no se programa&#8221; en otras palabras la capacidad emergente del sistema.     Como ya habrá intuido el lector, esta ultima es una de las características     de la vida artificial y existen otras mas.</p>
<h2>Los Siete Principos de la Vida Artificial</h2>
<p>En el libro Vida Simulada en el Ordenador, la     Nueva Ciencia de la Inteligencia Artificial de Claus Emmeche, se mencionan los     siguientes siete puntos principales que describen la Vida Artificial:</p>
<ol>
<li>&#8220;La biología de lo posible. La Vida     Artificial no se restringe a la vida creada con carbono y es el objeto de la     biología experimental.</li>
<li>Método Sintético. Intento de la Vida Artificial por sintetizar     los procesos y comportamientos vitales, por medio de un ordenador.</li>
<li>Vida real (artificial). La conducta y los procesos generalizados, son tan     genuinos como la conducta exhibida por los organismos de la vida real. Lo artificial,     de la Vida Artificial descansa en los chips de silicio y demás componentes     del ordenador, que fueron creados por el hombre y no en el comportamiento, lo     cual es producido por la misma naturaleza.</li>
<li>Toda la Vida es forma. La vida es un proceso y es la forma de este proceso,     no la materia, lo que constituye la esencia de la vida. Uno puede ignorar por     lo tanto el material y en cambio, abstraer de él la lógica que     gobierna el proceso, tomándolo de la forma material concreta que conocemos.     En consecuencia se puede lograr la misma lógica en otro revestimiento     o sustrato material. La vida es fundamentalmente independiente del medio</li>
<li>Construcción de abajo hacia arriba. En la programación de abajo     hacia arriba, se definen pequeñas unidades y unas pocas y sencillas reglas     para su interacción interna, puramente local, de esta interacción,     surge un comportamiento coherente &#8220;global&#8221;, no programado previamente.     La programación de abajo hacia arriba, surge del hecho de que nuestras     proteínas están &#8220;programadas&#8221;, en forma relativamente     explícita por el ADN, pero, no hay un gen que especifique directamente     la forma de la cara o el número de dedos.</li>
<li>Procesamiento paralelo. El principio de procesamiento de información     en la Vida Artificial, se basa en el paralelismo masivo que ocurre en la vida     real. En la vida real, las células nerviosas del cerebro trabajan una     al lado de la otra, sin esperar a que su vecina &#8220;termine su trabajo&#8221;.</li>
<li>Facilidad de emergencia. La palabra emergencia, se usa para designar el fascinante     todo que se crea cuando muchas unidades semisimples interactúan unas     con otras de una manera compleja&#8221;.</li>
</ol>
<h2>Las Propiedades de la Vida</h2>
<p>En este mismo libro, se mencionan las Propiedades     de la Vida, y son las siguientes:</p>
<ol>
<li>&#8220;La vida es una configuración en     el espacio-tiempo.</li>
<li>La vida ama la autorreproducción.</li>
<li>La vida está asociada con el acopio de información, para su     autorrepresentación.</li>
<li>La vida prospera con la ayuda del metabolismo.</li>
<li>La vida participa en interacciones funcionales con el ambiente.</li>
<li>Las partes de los seres vivos tienen una crítica dependencia interna     de unas respecto de las otras.</li>
<li>La vida exhibe una estabilidad dinámica frente a perturbaciones.</li>
<li>La vida, no la individual, sino, su linaje, tiene la capacidad de evolucionar&#8221;.</li>
</ol>
<h2>Los Autómatas Celulares</h2>
<p>Una de las herramientas mas utilizadas en la     programación de ecosistemas virtuales son los autómatas celulares     propuestos originalmente por el Dr. Von Newman en los años cuarenta como     herramienta de programación.</p>
<p>Los autómatas celulares     son celdas que contienen valores donde el espacio y el tiempo son cantidades     discretas y por lo tanto, son sistemas dinámicos discretos y pueden definirse     en términos del estado o valor de las celdas, la vecindad y la regla     local.</p>
<p>El estado o valor es el dato que contienen,     el más común es el de 0 ó 1.</p>
<p>La vecindad se refiere a los elementos más     cercanos al retículo en estudio, por ejemplo, en un vector para un elemento     i sus vecinos son i-1 e i+1.</p>
<p>Los dos tipos más comunes de vecindad     son la Vecindad de Von Newman o vecindad de cuatro puntos donde un elemento     i tiene por vecinos a los elementos i+1, i-1, i+n e i-n.</p>
<table border="1" width="80" align="center">
<tbody>
<tr>
<td width="35%" align="center"></td>
<td width="35%" align="center">i-n</td>
<td width="30%" align="center"></td>
</tr>
<tr>
<td width="35%" align="center">i-1</td>
<td width="35%" align="center">i</td>
<td width="30%" align="center">i+1</td>
</tr>
<tr>
<td width="35%"></td>
<td width="35%" align="center">i+n</td>
<td width="30%"></td>
</tr>
</tbody>
</table>
<p align="center">Figura 1.1.1. Elementos vecinos<br />
a i en la Vecindad de Von Newman.</p>
<p>Y la Vecindad de Moore, o de ocho puntos, que considera     no solo a los cuatro anteriores, sino también a los elementos i+n+1,     i+n-1, i-n+1 e i-n-1.</p>
<table border="1" width="80" align="center">
<tbody>
<tr>
<td align="center">i-n-1</td>
<td align="center">i-n</td>
<td align="center">i-n+1</td>
</tr>
<tr>
<td align="center">i-1</td>
<td align="center">i</td>
<td align="center">i+1</td>
</tr>
<tr>
<td align="center">i+n-1</td>
<td align="center">i+n</td>
<td align="center">i+n+1</td>
</tr>
</tbody>
</table>
<p align="center">Figura 1.1.2. Elementos vecinos<br />
a i, en la Vecindad de Moore.</p>
<p>Las reglas, se refieren a la forma en que se     relacionan dos autómatas celulares, por ejemplo, cambiar de estado cuando     se encuentren dos autómatas con el mismo contenido. Esto se describe     con mas detalle en el <a href="http://www.geocities.com/paolaneriortiz/juego_vida.htm">Juego de la vida</a>.</p>
<h2>Referencias</h2>
<ul>
<li>EMMCHE, Claus. &#8220;Vida Simulada en el ordenador.     La nueva ciencia de la Inteligencia Artificial. Colección Limites de     la Ciencia. Editorial Gedisa (http://www.gedisa.com). Octubre de 1988</li>
<li>ADAMI, Christoph. &#8220;Introduction to Artificial     Life&#8221;. Editorial Telos (http://www.telospub.com)</li>
<li>GARCÍA V., Angélica, MUÑOZ     Meléndez, Angélica, NEGRETE, José. &#8220;Propuesta de un     Mundo Sintético Fundado en Metodologías Basadas en el Comportamiento&#8221;.     Memorias del VI Congreso Nac. sobre informática y computación     organizada por la Asociación Nac. de Instituciones de Educación     en Informática (ANIEI). Mérida, Yucatán. Octubre 1993</li>
<li>La Vida llegó a Maloka. Pagina web con     información descriptiva sobre el área de la Vida Artificial. http://maloka.org/virtual/vida/evolucion.htm</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ubicuos.com/2009/05/31/la-vida-artificial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bases de Conocimiento</title>
		<link>http://www.ubicuos.com/2009/05/01/bases-de-conocimiento/</link>
		<comments>http://www.ubicuos.com/2009/05/01/bases-de-conocimiento/#comments</comments>
		<pubDate>Sat, 02 May 2009 01:53:42 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[ia]]></category>
		<category><![CDATA[inteligencia articial]]></category>

		<guid isPermaLink="false">http://www.ubicuos.com/?p=144</guid>
		<description><![CDATA[Cuentále a tus amigos en Facebook Un grupo de científicos del Technion de Israel está utilizando la Wikipedia como base de conocimiento para mejorar las reglas de asociación en el análisis de textos. Sugieren aplicaciones en sistemas antispam, búsquedas y otros sistemas que requieran &#8220;conocimiento del mundo&#8221; para desambiguar y mejorar sus niveles de acierto. [...]]]></description>
			<content:encoded><![CDATA[<div align="left" style="padding: 0px 5px 5px 0px; clear: left; float: left;"><a name="fb_share" type="button_count" share_url="http://www.ubicuos.com/2009/05/01/bases-de-conocimiento/">Cuentále a tus amigos en Facebook</a></div><div class="tweetmeme_button" style="float: left; margin-left: 10px;width:90px">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F05%2F01%2Fbases-de-conocimiento%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F05%2F01%2Fbases-de-conocimiento%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Un grupo de científicos del Technion de Israel está utilizando la Wikipedia como base de conocimiento para mejorar las reglas de asociación en el análisis de textos.</p>
<p>Sugieren aplicaciones en sistemas antispam, búsquedas y otros sistemas que requieran &#8220;conocimiento del mundo&#8221; para desambiguar y mejorar sus niveles de acierto.</p>
<p>Otro uso obvio, aunque no se menciona en el artículo, es en el ámbito de la traducción automática, que cada vez se sirve más de sistemas basados en en el conocimiento.</p>
<p>La investigación será presentada en la India durante una conferencia internacional sobre Inteligencia Artificial. Lo novedoso no es el uso de bases de datos de conocimiento sino lo versátil que puede llegar a ser la Wikipedia, ya que en este caso no son personas, sino máquinas, quienes la consultarían.</p>
<ul>
<li><a href="http://noti.hebreos.net/enlinea/2007/01/15/1351/">Noticias de Israel </a></li>
<li><a href="http://es.wikipedia.org/wiki/Technion">Technion</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ubicuos.com/2009/05/01/bases-de-conocimiento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 6/74 queries in 1.658 seconds using disk: basic

Served from: www.ubicuos.com @ 2012-02-05 07:21:56 -->
