Probando la AppFactory (II)

Hace poco les contaba que probé la AppFactory y que estaba, digamos, contento con lo que había visto, comentaba, también que había enviado mi aplicación para que la certificaran y estuviera pronto en la tienda. Sin embargo, mi desencanto no podría ser peor...

Resulta pues que las aplicaciones creadas dependen completamente de internet, de por si me resultó un poco raro que en el manifiesto de la aplicación estuvieran marcados los permisos de Internet y Redes Privadas. La app fue rechazada varias veces porque declaraba el uso de internet y no incluía una póliza de privacidad para el usuario ( ¬¬).



Mi app en ningún momento hace uso explícito de internet puesto que solo consta de 4 módulos de noticias (texto estático)  y uno de galería (imágenes estáticas). Nada consumido bajo demanda, ni conexiones a servicios web, mucho menos cuentas de usuario.

Debuggeando me di cuenta de el horror: Cuando la aplicación inicia se conecta a un web service para descargar información necesaria para el inicio de esta misma, lo cual significa que si el usuario final no tiene conexión a internet jamás podrá iniciar la app. Traté de romper ese vínculo de las aplicaciones con internet pero tampoco pude y es que me parece que la plataforma a experimentado algunos problemas en los últimos días.

La verdad es que no sé para que sea necesaria la conexión a internet para arrancar nuestra app, pero se me ocurren muchas teorías misteriosas, entre ellas una en donde creo que si en algún momento dado dejas de pagar por el servicio de AppFactory tu aplicación será inservible hasta que vuelvas a cumplir los pagos.

En resúmen: Vaya decepción que no pueda usar mi aplicación si no estoy conectado a internet y vaya decepción que mi app no haya quedado "lista" para certificarse inmediatamente después de haberla descargado de la plataforma de AppFactory.

¡Saludos!
@fferegrino :)

El problema del agente viajero y los algoritmos genéticos


Algoritmos genéticos
De las clases aprendí que los algoritmos genéticos son métodos de búsqueda y optimización inspirados en la evolución y en la base genética que esta implica. Para el uso de un algoritmo se genera un conjunto de soluciones posibles (nombraremos a cada una de estas soluciones "individuos") a nuestro problema (llamada población), esta población es mutada y recombinada mediante acciones aleatorias, como sucede en la evolución, además son sometidos a una evaluación para decidir cuales son los más aptos y separarlos del resto, que será descartado. En fin.


Llegó momento de entregar el proyecto final de la unidad de aprendizaje Genetic Algorithms, y como proyecto final elegí el clásico problema del agente viajero (Traveling Salesman Problem, TSP), y digo clásico porque en verdad resulta ser de los más usados para ejemplificar una de las muchas aplicaciones de este tipo de algoritmos.

TSP
El problema, más o menos, enuncia que: Un agente viajero tiene que visitar n ciudades sin pasar por la misma ciudad más que una vez, así mismo desea recorrer las ciudades trasladandose lo menos posible entre ellas, esto quiere decir que desea encontrar la ruta más corta para pasar por todas y cada una de ellas solamente una vez.

El problema es sencillo y se puede resolver con un algoritmo genético simple, basta con que se emplee técnicas permutativas (evitando así que se de una solución en la que se repitan ciudades para una ruta).

Solución
Para llegar a la solución de este problema escribí una pequeña aplicación en C#, en donde se emplea un algoritmo genético para llegar al resultado. 

Para la cruza se emplea el método de Cruza Cíclica, la mutación se realiza intercambiando dos genes seleccionados aleatoriamente y en la selección se elige a la mitad de individuos con mejores soluciones.

Código
Ahora sí, lo más interesante, además de lo ya mencionado dentro de la aplicación se usa la API de gráficos. Me da la impresión de que por ahí puede haber un poco de desperdicio de memoria pero pues ¡meh!
Traté de comentar el código todo lo que pude a manera de que quede claro así que espero les sirva y cualquier comentario y/o aclaración por correo, Twitter o en la sección de comentarios.

Encuéntralo en GitHub: Traveling Salesman Problem - C#

¡Saludos!
@fferegrino :)