jueves, 7 de febrero de 2013

Basic machine learning

Para hacer un programa capaz de aprender necesitamos las siguientes cosas:
1) Al menos una variable donde guardar cosas (aquí guardaremos lo que aprendamos)
2) Un método de evaluación que te diga que tan mal/bien le fue a tu programa (lo que en la jerga de las matemáticas se le conoce como una función objetivo o una fitness function)
3) Una estrategia para que nuestro programa intente diferentes soluciones.

Y con solo esas 3 cositas ya la armamos, aquí un ejemplo sencillo.

Nuestro problema consiste en tener un programa que llene los envases de coca con coca-cola.
Nuestro programa se encargara de abrir la "manguera" por la que sale la coca.
Definiremos nuestros 3 puntos para este problema.
1) En este caso nuestra variable sera el tiempo en el mantendremos la manguera abierta.
2) Nuestro método de evaluación sera que tan llena o vacía queda el envase al pasar por nuestro programa, por ejemplo en la imagen, si la cantidad de coca vertida es justo la cantidad deseada obtendremos una calificación de 0, mientras que si nos pasamos o echamos de menos obtendremos una calificación negativa.
3) Y nuestra estrategia sera incrementar o disminuir el tiempo en el que dejamos la manguera abierta.



El uso de el tipo para aprender el bastante directo, puesto que lo que queremos es llenar una botella en cierto nivel, y el nivel de la botella depende de que tanto tiempo dejamos la manguera abierta. Nuestra función objetivo también es bastante directa, pues lo que queremos es vender cocas que contengan la cantidad de liquido que promocionamos (si no nos demandan) y sin embargo no darles mucho mas de esta cantidad, pues si no estamos regalandoles coca.

Aquí un disque código de un programa que intenta aprender este tiempo:

tiempo = 0;
mejorTiempo = 0;
mejorCalificacion = -infinito;
Mientras funcionemos
Abrir la manguera durante tiempo segundos y obtener nuestra calificación
si calificacion(tiempo) > mejorCalificacion{
    mejorCalificacion = calificacion(tiempo)
    mejorTiempo = tiempo;
}
tiempo = mejorTiempo + Random();


En la grafica pongo el resultado de una corrida de la siguiente implementación
http://pastebin.com/d9Cr93xU
Se gráfica el mejorTiempo en cada paso del loop contra la calificación obtenida por ese tiempo.


miércoles, 25 de julio de 2012

Cute cat theory

La teoría del gato lindo dice la mayoría de la gente en la web esta interesada en la pornografía y en ver imágenes de gatos lindos.
Luego, sitios de interacción social como facebook, twitter, reddit entre otros, solo son una plataforma para que la gente comparta imágenes de gatos lindos. Si no hay gatos lindos, tu herramienta no funciona adecuadamente. Estas mismas herramientas son usadas para apoyar movimientos sociales, pues les permiten comunicarse con otras personas y es difícil para el gobierno u otras instituciones cerrar estos sitios, pues privarían a mucha gente de sus imágenes de gatos lindos, lo que causaría una gran inconformidad y terminaría ayudando a la causa que intenta destruir.

-Si quitaran toda la pornografía de internet al final solo existiría una pagina que se llamaría "Por favor traigan de regreso el porno".

martes, 10 de julio de 2012

Fluido no newtoniano.

Los fluidos no newtonianos son aquellos que no se comportan igual que un fluido newtoniano bajo la presión.

Para crear nuestro propio fluido no newtoniano ocupamos una bolsita de maicena y un poco de agua.
Por cada cucharada de maicena que se agregue al frasco agregue una y media de agua, revuelva bien y listo.

Ahora vea lo que pasa al hacer presión sobre el liquido, puede verter un poco sobre sus manos y hacer presión con ella, puede poner una "espada del rey arturo" dentro del liquido y tratar de sacarla con toda su fuerza.

El truco esta que este liquido se comporta como un solido al tener una mayor presión.

viernes, 11 de mayo de 2012

Es un ciclo sin fin.

El hombre ha extendido sus tentaculos de dominación por muchas partes del planeta. Tanto que la sensación de la humanidad es una de comodidad, una en la que no hay nada nuevo que ver bajo el sol.

Recientemente fue explorada la cueva Lechuguilla, una cueva que estaba sellada a la superficie durante millones de años. En esta cueva se encontraron bacterias con resistencia a antibioticos modernos.

Para mi esta fue una noticia algo impactante, pensar que aun estamos lejos de descubrir todo lo que existe en el planeta, que aun existen cosas ahí fuera de las que no tenemos idea y que podrían traer en fin de la humanidad.


Fuentes:
http://www.sciencenews.org/view/generic/id/339907/title/Underground_resistance

martes, 8 de mayo de 2012

Teletransportación, el dilema del trafico

Si pudiera inventar algo, inventaría la teletransportación.
Se ocuparía un aparato emisor y uno receptor, y solo se permitiría la teletransportación de seres humanos.
Imaginense, se ahorrarían horas de viaje, se evitarían los congestionamientos y nada de estres.
Lamentablemente por motivos de seguridad, se debe realizar una conección con el aparato receptor para que permita a una persona teletransportarse, se tendrían que tener guardias con detectores de metales y cacheo, y lo regular que ponen en los aeropuertos.

Claro que estas medidas de seguridad harían mas lento el proceso de la teletransportación. Y al existir mas demanda que la capacidad inevitablemente se crearían colas.
Para aquellos que no pudieran pagar el coste de una teletransportación personal, existirían teletransportadores en masa, tendría la forma de un camión de transporte publico, y al subirse la suficiente cantidad de gente que viaje a algún lugar se realizaría la teletransportación.

Claro existirían los teletransportistas, que a fin de ganar mas dinero subirían la mayor cantidad de gente posible al teletransporta-camión. Sin importarle que fueran parados.

Por supuesto se venderían modelos emisores privados, para todos aquellas personas de dinero que no quieran juntarse con la prole.

En fin, que sería lo mismo que como estamos ahora, estres, trafico y un medio de transporte cada día mas caro.

jueves, 3 de mayo de 2012

Como encontrar planetas

Buscando un nuevo hogar.

A la hora de buscar un nuevo buscar donde vivir solo tenemos que buscar por internet comprar un periódico, o ir a alguna agencia de vienes raíces.
Podemos elegir por el tamaño, color, ubicación, y muchas otras cosas, hay una gran variedad de lugares de donde elegir.

Pero si quisieramos cambiarnos de planeta la cosa se complica un poco mas.
Suponga que contamos con los recursos para realizar el viaje, el problema se encuentra en encontrar un lugar.

Encontrar un planeta en el espacio no es una tarea sencilla, un planeta no emite alguna señal lo suficientemente fuerte para poder destinguirlos. Un planeta se vuelve imposible de ver debido a lo brillante de la estrella sobre la que gira.

Para buscar un planeta se hace uso de 2 hechos, los planetas giran alrededor del sol, y entre mas cercano este un objeto a nosotros, aparenta ser mas grande.
Quien no ha tapado el sol con una moneda, con la palma de su mano, o con el pulgar.
Esto es gracias a la perspectiva, nuestra mano no es del mismo tamaño que el sol, pero al estar esta mas cerca a nosotros, aparenta un tamaño mayor con respecto al sol.

Suponga que el planeta tarde 6 meses en dar una vuelta alrededor de la estrella, esto quiere decir que en algún momento el planeta pasara frente a la estrella y después de esa vez lo hará con un intervalo regular de 6 meses.
Al igual que cuando la luna pasa frente a la tierra y el sol, creado un eclipse.
Un planeta girando alrededor de su estrella cubrirá la luz de la estrella, aunque en este caso la luz de la estrella no se ve eclipsada en tal magnitud, es lo suficiente para que un telescopio sensible a la luz pueda percibir estos pequeños parpadeos de las estrellas.



Una vez que se observa el primer parpadeo se sigue observando la estrella hasta observar otro parpadeo, suponga que pasaron 6 meses entre cada parpadeo, entonces se observa la estrella en los próximos 6 meses, si ocurre otro parpadeo se pone como probable la existencia de un planeta y así se sigue observando y analizando si existe un parpadeo en los siguientes 6 meses.


En la actualidad la sonda espacial Kepler realiza un estudio de estos parpadeos a una gran cantidad de estrellas. El planeta con codigo Kepler-22b es el primer planeta detectado en la zona habitable de una estrella como la tierra.


En el siguiente link hay una simulación interactiva de como funciona este proceso:

http://kepler.nasa.gov/multimedia/Interactives/keplerFlashAdvDiscovery/?CFID=7894997&CFTOKEN=27341114#

miércoles, 2 de mayo de 2012

El problema de los piratas.


Ahora trataremos un poco la programación dinamica.
Para mi, en escencia la programación dinamica no es mas que adentrarse a los mas profundo de un problema y resolver un pequeño pedasito del problema, dar un paso para atras y resolver otro pedacito, y así hasta terminar.

Lo importate es poder separar el problema de tal manera que podamos resolver estos pequeños problemitas de forma eficiente (si resolver todos los problemitas es mas tardado que resolver el problema original se pierde el sentido).

Para ejemplificar la idea de Programación dinamica trataremos el problema de los piratas.

En un gran barco pirata existian 10 piratas malvados con un gusto un tanto extraño por la democracia. Como todo buen pirata, se dedicaban a despojar a los barcos de sus poseciones.
Un dia los piratas lograron obtener un botin de 100 monedas de oro. Como estos piratas tenían un gusto extraño por la democracía no se repartian las monedas de oro de forma equitativa.
Si no que los piratas se ordenaban por el tamaño de sus barbas, el pirata con la barba mas larga proponía una forma de repartir el botin, digamos 100 monedas de oro para el, y nada para los demas.

Despues de la propuesta todos los piratas votan para decidir si aceptan dicha propuesta o la rechazan. Si la propuesta es votada el 50% o mas de los piratas vivos la propuesta es aceptada, si no esta es rechazada y el pirata que la propuso sera tirado por la borda.
Los piratas, siendo unos seres razonables, siempre preferían tener oro en las manos en contra de no tenerlo, en caso de no obtener oro prefieren no morir, y luego prefieren ver caminar a un pirata por la plancha.



Orden de preferencía:
-Oro
-Vivir
-Ver a alguien caminar por la plancha
-Nada

Metodo democratico:
El pirata con la barba mas larga realiza una propuesta, los piratas votan en base a sus preferencías. Si almenos el 50% de los piratas votan a favor se aprueba la propuesta y se termina la repartición, votan menos del 50% en favor, el pirata que realizo la propuesta es lanzado por la borda y el siguiente pirata con la barba mas larga realiza una nueva propuesta.



La pregunta para este problema consiste aconsejar al pirata con la barba mas larga para que realice la repartición que maximize sus intereses.
Para hacer las cosas mas sencillas de entender, numeraremos a los piratas de acuerdo al tamaño de su barba.
Diremos que el pirata con la barba mas larga es el número 1, el segundo pirata con la barba mas larga sera el número 2, y así sucesivamente hasta el pirata con la barba mas corta que sera el pirata número 10.



La respuesta a este problema se da a continuación:
Si quiere obtenerla por su cuenta, solo siga leyendo.


Pirata 10
Pirata 9 Pirata 8 Pirata 7 Pirata 6 Pirata 5 Pirata 4 Pirata 3 Pirata 2 Pirata 1
0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 96 monedas


Para llegar a esta respuesta aplicaremos la idea de programación dinamica de empezar al final y trabajar hacía atras.


a)
Supongamos que la propuesta de todos los piratas del 1 al 9 fue rechazada y solo queda el pirata número 10 (el de la barba mas corta).
Ya que él es el unico pirata vivo, la mejor repartición que puede conseguir es repartir las 100 monedas de oro para él. Dado que es el unico pirata el votara a favor de su propuesta.


b)
Ahora suponga que solo quedan el pirata 10 y 9 vivos, es el turno del pirata 9 de hacer una propuesta.
Veamos como razona el pirata 9:
Con su voto, no importa si el pirata 10, vota en su favor o no, el tendra almenos el 50% de los votos, con lo que su propuesta pasara.
Por ende, lo que mas le conviene es una repartición en la que el obtenga las 100 monedas y el pirata 10 no obtenga nada.


c)
Ahora demos otro paso atras, y veamos la situación cuando quedan los piratas 10, 9 y 8 vivos.
A diferencia del pirata 9, el pirata 8 no puede ganar la votación solo con su voto, necesita el voto de almenos uno de los otros piratas.
El sabe que si su propuesta no pasa, tendremos el caso descrito en b), donde el pirata 10 no revice ninguna moneda.
Luego, suponga que el pirata 8 propone una repartición de 99 monedas si mismo, cero monedas para el pirata 9, y una moneda para el pirata 10.
Con esta propuesta el pirata 10 obtendra una moneda de oro, mientras que si no vota en favor de esta propuesta tendremos el caso en b) donde el no gana ninguna moneda.
Luego el pirata 10 votara a favor de esta propuesta, sumando el voto del pirata 8 (que obviamente votara por su propuesta) se aprobara esta propuesta.

Repartición de monedas:

Pirata 10 Pirata 9 Pirata 8
1 moneda 0 monedas 99 monedas


d)
Demos un nuevo paso para atras, ahora con los piratas 10, 9, 8, y 7 vivos.
Es el turno del pirata 7 para dar su propuesta.
El pirata 7 necesita 2 votos para que su propuesta pase, contando el suyo, necesita convencer a uno de los otros 3 piratas vivos.
Su propuesta es la siguiente:

Pirata 10 Pirata 9 Pirata 8 Pirata 7
0 monedas 1 moneda 0 monedas 99 monedas

Si la propuesta del pirata 7 no pasa, tendremos el caso marcado como c) en donde el pirata 9 no obtiene ninguna moneda.
Como en la propuesta del pirata 7 el pirata almenos resive una moneda, mejor votar a favor.
Así es como el pirata 7 consigue el voto del pirata 9 y consigue aprobar su propuesta.


e)
Un nuevo paso atras nos lleva a la situación en que los piratas 10, 9, 8, 7 y 6 estan vivos.

La propuesta del pirata 6 sera la siguiente:

Pirata 10 Pirata 9 Pirata 8 Pirata 7 Pirata 6
1 moneda 0 monedas 1 moneda 0 monedas 98 monedas


El pirata 6 necesita 3 votos para lograr pasar su propuesta, tiene su voto asegurado, eintenta obtener los votos de los piratas 10 y 8.
Nuevamente, si la propuesta del pirata 6 no es aprobada, pasaremos al caso d) en el cual los piratas 10 y 8 no optienen monedas. Como en la propuesta del pirata 6 los piratas 10 y 8 obtienen una moneda, mejor votan por a favor, con lo que se aprueba la propuesta.

f)
La propuesta es la siguiente:

Pirata 10 Pirata 9 Pirata 8 Pirata 7 Pirata 6 Pirata 5
0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 98 monedas

Por las mismas razones dadas anteriormente.

g)

Pirata 10 Pirata 9 Pirata 8 Pirata 7 Pirata 6 Pirata 5 Pirata 4
1 moneda 0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 97 monedas


h)

Pirata 10 Pirata 9 Pirata 8 Pirata 7 Pirata 6 Pirata 5 Pirata 4 Pirata 3
0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 97 monedas


i)
Pirata 10 Pirata 9 Pirata 8 Pirata 7 Pirata 6 Pirata 5 Pirata 4 Pirata 3 Pirata 2
1 moneda 0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 96 monedas



j)

Luego, la mejor repartición que el pirata con la barba mas larga puede proponer para su propio beneficio, es:

Pirata 10 Pirata 9 Pirata 8 Pirata 7 Pirata 6 Pirata 5 Pirata 4 Pirata 3 Pirata 2 Pirata 1
0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 1 moneda 0 monedas 96 monedas


Taran.