Sony apuesta por Android con su Developer Program para PlayStation Suite

No comments »

Sony da un paso adelante en su estrategia de integración entre su línea de desarrollo portatil y su vertiente del sector móvil, el elegido será en primer lugar Android. Qué quiere decir eso amigos, que podremos trabajar el desarrollo de un título que será válido tanto para la PlayStaton Vita, como para un móvil Xperia o cualquier otro dispositivo que vaya alimentado por Android.

La noticia implica no solo que podremos disfrutar de la potencia de C# en nuestros desarrollos o de las estructuras propias de PlayStation para su portable sino que además tendremos acceso a los diferentes mercados tanto la PlayStation Store o el de Google Play. Con ello aumentamos el impacto de nuestro título.

El Developer Program ofrece acceso gratuito al PlayStation Suite Studio y a PlayStation Suite UI Composer. Con los que podemos empezar a trabajar y a simular los diferentes bloques de código que vayamos generando. La ventaja es que podremos compilar tanto en el mismo equipo con en un dispositivo Android. Los ejemplos que se ofrecen con la solución llegan a ser juegos completos, no simples llamadas a las APIs de modo que podremos usarlos como referencia directa en nuestros propios sistemas.

El coste una vez se cierre esta beta será de 99$ al año sin embargo la experiencia y la oportunidad que brinda la capacidad de aprovechar esta iniciativa de Sony tanto desde el punto de vista del ingeniero como del productor es tremenda.

Parece una buena oportunidad para anticiparse al futuro, verdad?

Dopando el desarrollo de juegos para Android

1 comment »

Os presento un par de herramientas que os servirán de gran ayuda en el desarrollo de juegos para Android en el que os sea necesario trabajar la física:

- Andengine
- jBox2D

Con ellos podeis realizar desde sencillas simulaciones hasta juegos completos donde no queda nada interfaz por trabajar: acelerómetro, screen touch, vibración, sonido… Echadle un vistazo a ‘Balls of Steel’, un contundente juego para Android que pondrá a prueba tu capacidad de controlar la gravedad.

https://market.android.com/details?id=com.starcostudios.ballsofsteel

Una buena forma de empezar son los ejemplos de AndEngine… a disfrutarlo!

And the Oscar goes to… iRanger! Realidad Aumentada para la protección del Medio Ambiente

2 comments »

El iRanger es una herramienta orientada a crear una red de jugadores capaces de sincronizarse en tiempo real y sobre la posición determinada a través de la geolocalización y la realidad aumentada con la finalidad de proteger y defender al medio ambiente.

Con la tecnología que disponemos actualmente y la orientación social podemos crear un
entramado de ciudadanos conectados que cooperan para la manutención y protección de
bosques, lagos, parques naturales y demás entidades naturales que se ven afectadas por la
acumulación de residuos, riesgos de incendios o por diferentes amenazas que afectan
directamente y que dan lugar a zonas con un alto valor ecológico contaminadas, incendiadas o
afectadas por numerosos factores de peligro.

A través de la aplicación se podrá mediante la realidad aumentada determinar los lugares en los
que se encuentra una amenaza o detectarlos y marcarlos mediante geolocalización. Podremos
actuar en consecuencia o ayudar a mejorar el estado de la amenaza. Si somos profesionales
estaremos muy atentos a las novedades y a la comunidad activa de iRanges que actuan en la
zona.

Mediante iRanger 3 agentes diferentes harán uso de la tecnología: rangers, guardianes y
profesionales. Los primeros son los encargados de detectar y marcar las zonas con residuos, las
acumulaciones de maleza, la caza no autorizada … etc. Los segundos, los guardianes, se
encargan de constribuir a la mejora del estado ya sea actuando en una zona con residuos
mediante su retirada o trabajando de forma activa en mejorar cualquiera de las incidencias o
alertas. Finalmente los profesionales son los que trabajan dia a dia y utilizan esta información
como soporte.

El proyecto pretende servir de plataforma social y de herramienta de protección al mismo tiempo
por lo que dispone de un amplio grupo de funcionalidades dedicadas a la comunicación entre sus
usuarios. Por otro lado debe extraer el máximo partido a las posibilidades de la realidad
aumentada y a la geolocalización por lo que tiene que mostrarse especialmente útil en este
aspecto. Distinguimos entre la funcionalidad orientada a establecer redes sociales y la orientada a
dotar de funcionalidad de protección y monitorización a la herramienta.

>>> Funcionalidad de protección.
– Marcación de puntos geográficos en los que existe una incidencia.
– Fotografiado y comunicación con el servidor para adjuntar fotografías de la
zona.
– Exploración del terreno con Realidad Aumentada (superposición de elementos
informativos sobre la información recibida de la cámara del móvil).
– Historial de las actividades de la zona y comunidades activas (usuarios que han
participado, iniciativas llevadas a cabo, estadísticas interesantes como el
volumen aproximado de residuos retirados o proporción de bosque
protegida…etc).
– Apartado exclusivo para profesionales con la información detallada de los
elementos más importantes (historiales, tasas, informes de estado…etc).

>>> Funcionalidad de comunicación y promoción
– Comunicación con los usuarios cercanos via bluetooth y 3G.
– Exploración a través de realidad aumentada del entorno para determinar la
posición de usuarios en la zona (que deseen estar localizables).
– Web para la promoción y expansión de la idea con datos y referencias.
– Comunidad de usuarios en facebook y twitter.

>>>Tipos de usuarios.

Para darle un mayor grado de interés a la aplicación podemos utilizarla en 3 modalidades, como:
Ranger, Guardián o Profesional. Cualquier usuario puede trabajar en modalidad de Ranger o
Guardián y solo los profesionales acreditados pueden disponer de una versión profesional. Se
busca hacer más interesante la tarea de protección del medio ambiente e incluso convertirla en un
juego para motivar la expansión.

Los Rangers exploran el terreno marcando y fotografiando las zonas con
conlfictos (residuos, caza indiscriminada, riesgo de incendio por exceso
de maleza o cualquier otro motivo, deforestación, riesgos de
vertidos…etc), gracias a ellos se dispone de todo un tejido de información
muy difícil de llevarse a cabo.

Por otro lado los Guardianes trabajan de forma activa para la eliminación
de las incidencias o de las amenazas. Un Guardián explora mediante la
Realidad Aumentada y la geolocalización la zona en la que se encuentra.
Puede incluso haberla explorado desde su casa a través de la web de la
iniciativa. Observa las fotos de la zona y actúa en consecuencia y en
base a sus posibilidades. Elimina algunos residuos, actualiza el estado de
la zona con nuevos grados de contaminación, acumula los residuos en
una zona concreta para facilitar las labores de los guardas
forestales…etc.

Finalmente los Profesionales son todos aquellos que dedican su labor
diaria a la protección del medio ambiente y a la prevención de incidentes
en una determinada zona. Estos acceden a un gran volumen de
información adicional, más compleja de comprender pero muy útil para
evaluar la evolución de la zona. Historiales de contaminación, regresiones
lineales para establecer estrategias de protección, mapas de influencia o
heat maps de las zonas más contaminadas…etc. Esto les supone una
fuente de información de valor incalculable ya que gracias a Rangers y
Guardianes pueden multiplicar su efectividad.

>>> Incidencias
Hemos visto que en función de nuestro perfil de usuario o de la forma en la que salimos ese dia
podemos llevar a cabo unas funciones u otras. Tomamos fotos de la zona y damos mandamos
una incidencia. Nos ponemos en contacto con compañeros u organizamos una salida de iRangers
a través de la web. Solventamos parte de una incidencia y la actualizamos para que todos puedan
saberlo. Incluso exploramos la zona para ver cuantos iRangers defienden el lugar.
Ahora es tiempo de ver qué tipo de incidencias vamos a manejar, la información que se va a
mostrar y cómo le facilitamos a los usuarios la tarea de explorar, analizar y solventar los riesgos e
incidencias del bosque. Aqui es donde la aplicación presenta un punto importante ya que de la
sencillez y usabilidad de esta funcionalidad depende en gran parte el éxito de toda la iniciativa. Se
crea de forma que pueda ser útil y dar respuesta a problemas globales y del mismo modo no deje
de ser extremadamente sencilla. Adicionalmente para ayudar a los Rangers a subir información y
a los Guardianes a actualizarla se facilitará una sencilla explicación de las categorías y de los
grados de cada una de ellas.

– Residuos: (ligeros, medios, pesados, líquidos…etc)
– Maleza: (alto riesgo, medio, riesgo moderado…)
– Deforestación: (rápida, progresiva, eventual…)
– Vertidos:(concentración alta, media, baja…)
– Contaminación:( acústica, líquida, olor…)
– Amenazas a la vida animal: (trampas, intoxicación… )
– Caza no autorizada: (eventual, habitual, caso asilado…)
– Alerta: (fuego, animal herido, persona incapacitada, alud…)

>>>Tecnología involucrada.

En el desarrollo del proyecto intervienen una serie de componentes que hacen que se aproveche
al máximo la tecnología actual tanto en materia móvil como en materia de conectividad.

– SO. Android/Iphone.
– Realidad Aumentada a través de la Layar Service Architecture.
– Geolocalización a traves de GPS y Google maps.
– Conectividad a través de 3G, wifi y bluetooth.
– Servidor bajo entorno LAMP

El hecho de trabajar sobre elementos que se encuentran soportados bajo potentes comunidades
de desarrollo prevee actualizaciones y compatibilidades futuras así como nuevas funcionalidades
derivadas del trabajo en sintonía con las comunidades de desarrolladores.

>>> Impacto ambiental

Una correcta promoción del proyecto dará lugar a un impacto extremadamente importante sobre la
calidad de conservación de nuestros parajes naturales y sobre la fauna y flora de la zona ya que
mediante la detección de riesgos y la colaboración de los ciudadanos, los profesionales de la
conservación podrán trabajar cada vez con más eficiencia y velocidad y sobre todo con una
realimentación de información hasta ahora nunca vista.

El impacto se materializa en parajes más limpios, riesgos más controlados, caza no autorizada
mucho más difícil de llevar a cabo sin ser sancionado, profesionales de la materia con mucha más
información de su entorno y con toda una comunidad de amantes de la naturaleza con una
herramienta más para además de disfrutar de la naturaleza ayudar a preservarla.

>>> Beneficios sociales

Se traducen principalmente en los orientados a cada tipo de usuario: Rangers, Guardianes y
Profesionales.

Los Rangers disponen no solo de una herramienta con la que orientarse y marcar puntos con
incidencias sino de una forma de conectar y comunicarse con las diferentes personas que
frecuentan los lugares naturales por los que ellos se mueven. De este modo no solo se aporta una
forma de contribuir sino una forma de crear comunidades de individuos con intereses y hobbies
similares, lo que aporta un valor añadido a la labor de contribuir a la preservación del medio
ambiente.

Los Guardianes tienen una forma de acceder rápidamente a las zonas con mayor carga de
residuos o mayores incidencias y mediante los mecanismos sociales del sistema pueden
organizar actividades conjuntas para magnificar el impacto de sus acciones y hacerlas más
amenas.

Los Profesionales disponen por un lado de una multiplicación exponencial de ojos y manos
amigas y por otro lado de información que en muchos casos les sería muy dificil recopilar,
añmacenar y acceder. Mediante sus dispositivos móviles no solo pueden determinar el grado de
contaminación sino que pueden actuar en consecuencia. Por otro lado mediante las herramientas
orientadas a la web que acceden a la información introducida por Ranges y Guardianes pueden
fijar estísticas y proyecciones para el futuro pudiendo organizar mejor sus efectivos y recursos en
evitar problemas o controlar incidencias.

Como resultado, la iniciativa ha ganado el primer premio de Ideas Sostenibles de la Universidad Politécnica de Cataluña, un muy buen impulso para la construcción del proyecto por lo que no queda más que agradecer la labor de la organización y dedicar el proyecto, como se comentó durante la presentación, a sus principales promotores: Pedro Sánchez y Catalina Méndez.

> La web del Univers de la Universidad Politécnica de Cataluña.

En definitiva, hoy en día mas que nunca los ingenieros y apasionados por las nuevas tecnologías debemos enfocarnos a la búsqueda y desarrollo de aplicaciones orientadas a utilizar toda la potencia que las grandes compañías nos ponen al alcance de la mano con la finalidad de obtener soluciones capaces de concienciar a la sociedad, sincronizarla y permitir la obtención de herramientas útiles para la protección del medio ambiente que en última instancia es el primer responsable de que dispongamos de los recursos necesarios para crear esa tecnología.

Si eres desarrollador o interesado en la protección del medio mediante esta herramienta, ponte en contacto: starco@starcostudios.com Tu contribución puede ser determinante para el éxito de la iniciativa.

El Hack de Kinect … OpenKinect

No comments »

Como parte de la linea de desarrollo en Visión por Computador estamos muy al tanto de los avances en la materia. Hoy os traemos un breve post con un interesantisimo video acerca de cómo trabajar con el sistema de Microsoft Kinect. Los drivers open source ya han sido liberados. Como se puede apreciar, las posibilidades son infinitas. Eso es lo que por aquí llamamos un buen juguete!

PSFK-Kinect-Hack-Fixit-Teardown-A

Tech

Ahora falta por ver el contra-ataque de Microsoft. En cualquier caso a los afortunados que han podido trabajar y trabajan con ello que les quiten lo bailado! Y gracias a ellos Microsoft puede valorar la posibilidad de liberar su código viendo las grandes posibilidades que ofrece ;P Está claro que como empresa tienen que proteger su inversión, sin embargo, tambien esta muy claro que los Samurais Informáticos estaban deseando echarle el guante y empezar a trabajar de modo que la guerra queda abierta.

Hasta la próxima.

Los cimientos del OpenCV en Android

1 comment »

Lo que vamos a hacer aqui, queridos Samurais Informáticos, va a ser montar los cimientos de una
aplicación para Android completamente operativa y equipada con la librería openCV. Con ella vamos
a poder usar, procesar y modificar algoritmos orientados tanto a la adquisición de imágenes como
a su pre, pro y post-proceso. Podremos trabajar con elementos de segmentación, detección de contornos, cálculos de etiquetado, tracking o incluso reconocimiento facial. Una de las características que la hacen especialmente interesante es su apartado dedicado exclusivamente al reconocimiento de patrones por lo que puede ser utilizada tanto en aplicaciones exclusivamente orientadas al proceso de imágenes como a cualquier otra que requiera del uso de algoritmos englobados en la disciplinas del machine learning.

Iron Man Vision HUD

>>>1. Intro al OpenCV

Antes de empezar con el artículo, para poner en materia al interesado que no controla en detalle
la materia, haremos una pequeña referencia al tema principal, La Librería de visión por computador open source openCV. Como su propio nombre indica se trata de un grupo de funciones orientadas a la resolución de problemas típicos de la visión por computador y con una comunidad detrás muy importante de profesionales de la visión que se encarga de mantenerla actualizada.

Un ejemplo de lo que podemos hacer con ella es el del video siguiente donde se usan algoritmos de
Fast Object Tracking.

- una chuleta o Cheat sheet
- Un muy buen libro de open CV: O’Reilly, Learning OpenCV Computer Vision Library de Gary Bradski y Adrian Kaehler.

>>>2. OpenCV y Android

¿Para que vamos a querer utilizar openCV en Android? Principalmente para sacarle partido a la
gran sinergia de elementos que suelen formar el móvil: camara, acceso a internet, pantallas de
gran calidad y procesadores cada vez más potentes. Con estos ingredientes la aplicación de
técnicas de visión por computador se hace casi una obligación. Nuestro principal interés será como de costumbre aplicar este conocimiento al desarrollo de aplicaciones de entretenimiento.

- Reconocimiento de objetos: vehículos.

-Reconocimiento de caras o facial recognition.

– La realidad aumentada no nos la dejamos por el camino, es uno de los motivos principales por los que tocaremos estos temas y sobre el que nos especializaremos en posteriores artículos. De momento y para ir abriendo el apetito, una pequeña referencia.

-Vista de la aplicación de Realidad aumentada.


>>>>>3. Manos a la obra.

Trabajaremos con el entorno de java y la SDK de Android. Para los que no esteis familiarizados con ella pasaros por aqui y echadle un vistazo, en breve tendreis el entorno en marcha.

Una vez listo el entorno, la funcionalidad en la que nos vamos a enfocar será la siguiente:
- Adquisición de la información. (Cámara e Imagen)
- Proceso de los datos. (Aplicación de funciones predefinidas de openCV)
- Muestreo de la información en pantalla.

Con ello tendremos en marcha un proyecto que cubre los cimientos de cualquier aplicación que requiera el uso de la librería open CV.

>>>3.1 El código fuente de ejemplo.

>La base sobre la que trabajaremos la podeis obtener aqui: Test Android OpenCV
>El .apk siempre viene bien. testOpenCV.

>>>3.2 Elementos principales.

Cargaremos la librería y definiremos las estructuras principales mediante:

package com.starcostudios.opencv;

public class OpenCV {
static{
System.loadLibrary("opencv");
}
public native boolean setSourceImage(int[] pixels, int width, int height);
public native byte[] getSourceImage();
}

Montamos el sistema de menus. Podremos o bien hacer la foto o bien seleccionarla de la galería y aplicarle los cambios con la funciones de la librería openCV.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, CAMERA_ID, 0, "Camera");
menu.add(0, GALLERY_ID, 0, "Gallery");
return true;
}

Procesamos la reacción del sistema al escoger una opción u otra.


@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case CAMERA_ID:
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
long timeTaken = System.currentTimeMillis();
mCurrentImagePath = IMAGE_DIRECTORY + "/"
+ Utility.createName(timeTaken) + ".jpg";
Log.i(TAG, mCurrentImagePath);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File(mCurrentImagePath)));
startActivityForResult(cameraIntent, ACTIVITY_SELECT_CAMERA);
return true;
case GALLERY_ID:
Intent galleryIntent = new Intent(Intent.ACTION_PICK,
Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, ACTIVITY_SELECT_IMAGE);
return true;
}

return super.onMenuItemSelected(featureId, item);
}

Finalmente nos enfocamos en la aplicación de las funciones sobre la imagen seleccionada:

try {
Uri currImageURI = data.getData();
String[] proj = { Images.Media.DATA, Images.Media.ORIENTATION };
Cursor cursor = managedQuery(currImageURI, proj, null, null,
null);
int columnIndex = cursor.getColumnIndex(proj[0]);
cursor.moveToFirst();
mCurrentImagePath = cursor.getString(columnIndex);
Bitmap bitmap = BitmapFactory.decodeFile(mCurrentImagePath);
Log.i(TAG, mCurrentImagePath);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
opencv.setSourceImage(pixels, width, height);
long start = System.currentTimeMillis();
opencv.extractSURFFeature();
long end = System.currentTimeMillis();
byte[] imageData = opencv.getSourceImage();
long elapse = end – start;
Toast.makeText(this, “” + elapse + ” ms is used to extract features.”,
Toast.LENGTH_LONG).show();
bitmap = BitmapFactory.decodeByteArray(imageData, 0,
imageData.length);
mImageView.setImageBitmap(bitmap);
} catch (Exception e) {
}

Es importante tener en cuenta las estructuras que intervienen en el proceso ya que al pasar por diferentes mecanismos nos debemos ajustar a las estructuras de datos que se utilizan en cada estado del proceso.

En resumen, hemos sentado las bases del uso de OpenCV en Android pudiendo utilizar todas las funciones de la librería con lo que tenemos la capacidad de aplicar los últimos algoritmos en materia de Visión por Computador
para nuestras aplicaciones con Android. Posteriormente veremos como pasar por las diferentes fases propias de las aplicación de visión por computador pre, pro y postproceso.

Hasta la próxima!

Mobile World Congress 2012 en Barcelona

1 comment »

La edición del Mobile World Congress 2011 ha cerrado sus puertas siendo todo un éxito tanto
para la propia industria como para las empresas locales que han podido entrar en contacto
con los grandes referentes y moverse por el entorno.

Mobile World Congress 2012

Como resumen Nokia y Microsoft intentan impulsar la presencia en el sector, Sony presenta XPlay, Telefónica quiere cobrar a Google por el uso de sus lineas,
Apple ausente, la Xoom de Motorola y la Galaxy Tab de Samsung, Google presenta Android 3.0 Honeycomb y Starco lanza el iZen Temple! …todo un lujo!

Uno de los grandes HTC presentó un avance de las novedades e innovaciones que se llevarán a cabo durante este año próximo.

Especialmente interesante para nosotros el Xperia Play que presentó el propio Kaz Hirai con el
que se pretende crear una nueva generación de dispositivos orientados tanto al entretenimiento
como a mantener la funcionalidad y capacidad que ofrecen actualmente los smartphones.

PlayStation XPlay

Por otro lado se presentó oficialmente el Android 3.0 Honeycomb con nuevas delicias tanto para desarrolladores como para usuarios. Echadle un vistazo a la
demo oficial.

Stand Android 3.0

Por otro lado y al mismo nivel que las anteriores referencias, Starco Studios consolida su presencia en el ecosistema de aplicaciones para Android con aplicaciones
como el iZen Temple o la demo de Alter Ego que revolucionará la forma en la que
establecemos nuevas amistades a través del bluetooth del móvil y los juegos sociales www.aewar.com.

Desde Starco animamos a todos los profesionales del sector que todavia no forman parte
de esta reunión global a que esten presentes en la próxima edición del 2012 ya que la experiencia, los contactos y el aprendizaje que se adquiren bien vale el alto coste de la entrada.

Mobile World Congress

Nos vemos en el MWC 2012, esperamos que en Barcelona!

La Japan TechWorking Day, conociendo los motores del pais del Sol Naciente.

1 comment »

Recientemente el equipo de Starco ha asistido a la Japan Techworking, un evento organizado por la gente de Barcelona Activa en el que empresas locales han podido ponerse en contacto y establecer relaciones con empresas y directivos japoneses del ámbito de las tecnologías de la información y la comunicación.

En primer lugar se celebró una presentación donde los participantes pudieron ver en detalle los productos que actualmente ofrecen estas empresas y donde se pudo apreciar el nivel de desarrollo tecnológico del que disponen. La reunión tuvo lugar en la Sala Archimboldi y dió lugar a una dinámica de networking muy interesante y amena. Uno de los vídeos del evento con la intervención de nuestro CMS Victor Siguenza.

En segundo lugar lugar una rueda de reuniones con las empresas del sector más acordes con nuestra linea de desarrollo entre las que se cuentan Sony Gracenote, Omron Software, NewForestar o Phyzios. Algunas de las personalidades vinculadas al evento son Takeyi Ogura, Atsushi Hoshino o Eiji Miki. El lugar escogido, la Cámara de Comercio de Barcelona, ha sido una excelente elección que le ha dado al evento un valor añadido. En ella hemos presentado los proyectos de MontaMarket y Alter Ego con muy buena aceptación.

Puente

Las primeras impresiones de la cultura Japonesa en los negocios TIC, como ya nos podiamos hacer una idea de len base a los clichés que la envuelven, es que se trata de una cultura muy rigurosa,
con profesionales extremadamente comprometidos con los objetivos de sus empresas y con mucha capacidad de trabajo. A nivel técnico las empresas han presentado unos productos muy evolucionados y con algunas características que estan por llegar al resto de los mercados. Si tienes que trabajar con equipos o empresas japonesas ten muy en cuenta que se espera de ti el mismo nivel de educación y profesionalidad que ellos ofrece, de otro modo será muy difícil colaborar o llevar a buen puerto cualquier tipo de proyecto.

En resumen, muy buen trabajo por parte del equipo de Barcelona Activa!

General Grievous Bot y Google AI Challenge Planet Wars

4 comments »

Estamos de acuerdo que aunque técnicamente el General Grievous es un cyborg, nosotros lo vamos
a tratar como un Droide convencional y vamos a delegar sus funciones relacionadas con el Arte
de la Guerra a un cooprocesador sinergético acoplado a sus capacidades cognitivas naturales. De
esta forma justificamos el título y nos quedamos tan anchos. Nuestra función será iniciar la
creación de este procesador sinergético que ayude a Grievous a conquistar las Galaxias de Planet
Wars.

General Grievous

Para introducir lo que hemos comentado más en detalle en otros artículos, Google AI Challenge Planet
Wars es una iniciativa creada para competir a nivel global con aficcionados, profesionales e investigadores
en materia de inteligencia artificial aplicada al entretenimiento. Se trata de gestionar las naves de
batalla para conquistar las diferentes Galaxias. En ellas encontraremos un oponente neutral y un bot
enemigo creado por otro adversario. Lo que vamos a hacer aqui es introducirnos en este torneo y crear
un primer bot medianamente competente.

>>>1. El entorno

Primero echadle mano a la quick-start guide y muy pronto estareis dandole
caña al BOT. Descargaremos el kit de inicio en el lenguaje de programación que creamos conveniente. Basaremos este artículo en el kit de inicio de java. Si trabajais con Windows el procedimiento
es el de siempre: descargar la SDK de Java, actualizar la variable de entorno PATH y compilar los archivos.
Vereis más detalles en el tutorial de creación de vuestro propio bot.

Copiado en el directorio raiz el único archivo que tenemos que modificar es MyBot.java. En el encontraremos una
estrategia sencilla que cubre todo lo que necesitamos para empezar a trabajar. Lo principal a identificar es el
bucle de trabajo que se ejecuta a cada turno.

public static void DoTurn(PlanetWars pw) {

}

En el interior podemos crear estrategias tan elaboradas como creamos necesario, sin embargo, en cualquier caso todos
los procesos de cálculo irán enfocados a decidir el origen y el destino de nuestras flotas así como el número de
unidades que vamos a enviar. Determinar el planeta desde el que vamos a enviar la flota se haría de esta forma:

Planet source = null;
double sourceScore = Double.MIN_VALUE;
for (Planet p : pw.MyPlanets()) {
double score = (double)p.NumShips();
if (score > sourceScore) {
sourceScore = score;
source = p;
}
}

Como se puede apreciar recorremos todos nuestros planetas y buscamos el que más naves de batalla contiene. Una vez
hecho esto disponemos de la fuente desde la que se enviarán los planetas. A continuación buscamos el destino de nuestra
flota, en este caso el planeta más debil.

Planet dest = null;
double destScore = Double.MIN_VALUE;
for (Planet p : pw.NotMyPlanets()) {
double score = 1.0 / (1 + p.NumShips());
if (score > destScore) {
destScore = score;
dest = p;
}
}

Como podeis ver el hecho de que escojamos un planeta u otro depende de la puntuación que le demos y esto lo decidimos en la
variable ’score’. Cuanto menor sea el número de naves de batalla mayor será la puntuación. Finalmente tramitamos la orden al
capitán del escuadrón.

if (source != null && dest != null) {
int numShips = source.NumShips() / 2;
pw.IssueOrder(source, dest, numShips);
}

Con esto hemos comprendido el funcionamiento de la base mínima del coprocesador sinergético del General Grievous. Hecho esto
tendremos que tener muchas más cosas en cuenta. Veremos que detalles tenemos que empezar a valorar más adelante. Con la inteligencia
artificial que hemos programado no conquistaremos ni el planeta Kashyyyk de los wookies pero de momento ya nos vale para ir poniendonos
al dia.

>>>2. Simulando la batalla

Para ver nuestros progresos de forma directa sin tener que subir al servidor el paquete podemos dos cosas, o bien picarlo contra
el mismo:

java -Duser.language=en -Duser.region=US -jar tools/PlayGame.jar maps/map7.txt 1000 1000 log.txt “java -Duser.language=en -Duser.region=US MyBot” “java -Duser.language=en -Duser.region=US MyBot” | java -jar tools/ShowGame.jar

O bien picarlo contra otro bot, en este caso uno aleatorio de entre los que nos vienen con el paquete inicial:

java -Duser.language=en -Duser.region=US -jar tools/PlayGame.jar maps/map7.txt 1000 1000 log.txt “java -Duser.language=en -Duser.region=US MyBot” “java -Duser.language=en -Duser.region=US -jar example_bots/RandomBot.jar” | java -jar tools/ShowGame.jar

El desempeño no será representativo hasta que no lo veais compitiendo contra otros bots más elaborados de forma online. En cualquier
caso ya no por el hecho de competir y divertirse sino porque representa una forma excelente de ver como encara el resto de ingenieros
la solución al problema. Ya os puedo avanzar que será una cuestión matemática y de anticipación.


>>>3. Subiendo el bot al concurso

Una vez dados de alta podemos hacer la primera prueba con el bot de ejemplo. Cogemos la carpeta completa que hemos descargado, la comprimimos
en zip y la enviamos a través del formulario de la web. En breve empezará a competir y podremos iniciar la modificación de la IA para conseguir
mejores resultados.

Ejemplos de batalla que podremos ver son los siguientes:

> Batalla I
> Batalla II

Ya veis que cada uno aplica su estrategia, lo ideal es buscar la anticipación y el equilibrio entre el ataque y la defensa. Ya veremos más detalles
sin embargo lo que vamos a tratar aqui es puramente orientado a daros un punto de vista completo del concurso y no a describiros las mejores prácticas
ya que sería una mala forma de enseñar. Lo interesante es plantar las bases para que vosotros mismos seais los que vais descubriendo cómo encarar el
concurso y cómo ampliar la potencia ofensiva o defender con mayor eficacia. El parametrizado es un tema importante a tener en cuenta de cara a hacer
sencillas las optimizaciones.


4. Resultados

El resultado de una primera distribución de las estrategias más básicas y aplicando varios ajustes a los parámetros es el que veis a continuación, la
cosa no va mal del todo.

media

Ahora toca aplicar los preceptos del maestro Sun Tzu en el Arte de la Guerra y ponernos las pilas como Samurais Informáticos de primera categoría.

En próximos artículos plantearemos algunas estrategias sencillas para ir haciendo estómago y orientar un poco a donde van los tiros. De cualquier forma
es un jugete muy interesante que da muchas alegrías ademas de quebraderos de cabeza. Poco a poco vamos teniendo un general en condiciones.

A disfrutarlo!

Montando la Artillería para el Google AI Challenge Planet Wars

3 comments »

Hola muchachos. De nuevo estamos en medio de una iniciativa perfecta para poner en práctica las habilidades en materia de
algoritmia e inteligencia artificial, se trata de la Google AI Challenge. El objetivo es el de crear un bot para Planet Wars, un juego
que en el que la finalidad es la de conquistar los planetas del enemigo mediante ataques coordinados de nuestras naves de batalla.
Se trata de un juego de acción en estado puro donde podemos definir un gran número de estrategias. Un ejemplo de juego es el
programa original Galcon en el que se puede apreciar el funcionamiento básico.

Como podeis ver, se trata en definitiva de construir una entidad artificial que controle la gestión de una flota interplanetaria de forma automática
permitiendo atacar, defender y asediar al enemigo de la forma más precisa posible. Pongamosle que os vais a encargar de las funciones básicas del
General Grievous, colonizar y defender.

General Grievous

La página principal del evento es AI-Contest, echadle un vistazo.

1. Elementos principales del juego

Tenemos a nuestra disposición una serie de características y elementos a tener en cuenta que harán el problema extremadamente interesante.

> Lista de planetas
> Lista de flotas

Por cada planeta:

> Coordenadas de cada planeta (x, y)
> Dueño del planeta
> Número de naves de batalla
> Tasa de crecimiento

Los planetas neutrales tienen como identificador el 0. Los propios el 1 y los enemigos el 2. A cada turno se incrementan las naves de batalla
acorde con la tasa de crecimiento del planeta.

-Respecto a las Flotas:

Cuando enviamos flotas a diferentes planetas pueden ocurrir varias cosas. Por un lado si el planeta es nuestro, el número de naves de batalla será
incrementado en tantos como unidades enviemos. Por otro lado si el planeta es enemigo, por cada una de nuestras naves de batalla eliminaremos a
una del enemigo. Si el resultado es la eliminación completa de la flota enemiga, quedando almenos una de nuestras naves, el planeta será nuestro.
De otro modo el planeta seguirá en manos del oponente.

Un ejemplo de juego aplicado directamente sobre la plataforma del concurso es el que vemos a continuación:

El resultado es claramente una victoria para el jugador que concentra sus fuerzas en colonizar los planetas del oponente dejando prácticamente de lado los neutrales. Adicionalmente se adelanta a los planetas que
el oponente tiene previsto colonizar.

2. El código.

El código del bot base es extremadamente sencillo, a partir de ahi podemos complicarlo tanto como queramos respetando la limitación de un segundo máximo de proceso por cada turno. Disponemos de diferentes lenguajes sobre los que trabajar, escogemos Java ya que tenemos en mente la utilidad de esta herramienta para Android. Un pequeño ejemplo es el siguiente:

import java.util.*;

public class BullyBot {
public static void DoTurn(PlanetWars pw) {
// (1) If we current have a fleet in flight, just do nothing.
if (pw.MyFleets().size() >= 1) {
return;
}
// (2) Find my strongest planet.
Planet source = null;
double sourceScore = Double.MIN_VALUE;
for (Planet p : pw.MyPlanets()) {
double score = (double)p.NumShips();
if (score > sourceScore) {
sourceScore = score;
source = p;
}
}
// (3) Find the weakest enemy or neutral planet.
Planet dest = null;
double destScore = Double.MIN_VALUE;
for (Planet p : pw.NotMyPlanets()) {
double score = 1.0 / (1 + p.NumShips());
if (score > destScore) {
destScore = score;
dest = p;
}
}
// (4) Send half the ships from my strongest planet to the weakest
// planet that I do not own.
if (source != null && dest != null) {
int numShips = source.NumShips() / 2;
pw.IssueOrder(source, dest, numShips);
}
}

public static void main(String[] args) {
String line = "";
String message = "";
int c;
try {
while ((c = System.in.read()) >= 0) {
switch (c) {
case '\n':
if (line.equals("go")) {
PlanetWars pw = new PlanetWars(message);
DoTurn(pw);
pw.FinishTurn();
message = "";
} else {
message += line + "\n";
}
line = "";
break;
default:
line += (char)c;
break;
}
}
} catch (Exception e) {
// Owned.
}
}
}

Como podeis observar tanto la claridad del código como la de las estructuras de datos utilizadas es muy buena y nos permite ponernos en materia
de forma muy rápida. Es una forma de abordar y prácticar problemas de IA aplicada al entretenimiento muy recomendable. Tanto los que inician su
andadura como aquellos que ya llevan tiempo metidos en el ajo, el Google AI Challenge es una opción perfectamente válida.


-3. Visualización de la batalla

Una de las ventajas de Planet Wars es que podemos visualizar el desempeño de nuestro Bot de forma visual, dándonos una gran ventaja a la hora de evaluar su funcionamiento. Un ejemplo de juego es la
batalla entre boksimacko y george donde se puede apreciar que el algoritmo ganador utiliza una estrategia agresiva de colonización sobre los planetas que el oponente intenta poseer o posee.

http://ai-contest.com/visualizer.php?game_id=6612786

-4. Herramientas de monitorizado

Para los Samurais Informáticos os presento una herramienta generada expresamente para verificar el desempeño de los algoritmos utilizados para cada bot. Os puede dar alguna pista de las variables
a monitorizar y de las estrategias más fructíferas.

De momento hasta aqui llegamos. En el futuro veremos más en detalle el código y las diferentes estrategias que podemos utilizar a nivel conceptual. En lo referente a algoritmia profundizaremos en los algoritmos que pueden producir un mejor desempeño. Si alguno de vosotros se anima mucha suerte!

Hasta pronto

Peter Molyneux en Barcelona

No comments »

Aprovechando la presentación de su nuevo proyecto, Fable 3, Peter Molyneux visitó la ciudad y nos dedicó unos minutos. El fundador de Bulfrog y Lionhead Studios se encargó de hacer las delicias de los aficcionados al juego y de los seguidores de su obra. Starco Studios estuvo allí, teniendo en cuenta la gran cantidad de análisis realizados al producto estrella desde el punto de vista de la IA, Black And White, era más que una obligación. Una de las fotos del evento por parte del GameMaster Albert F.

Peter Molyneux Starco Studios

El resultado, un rato muy entretenido y una gran cantidad de fans dispuestos a conseguir un autógrafo del gurú de los videojuegos.

Welcome to Barcelona, Peter!