Karen es una aplicación que está siendo desarrollada por la empresa británica Blast Theory, y mediante la cual podremos interactuar con una inteligencia artificial que nos irá conociendo a base de hacernos preguntas sobre nosotros, y reaccionará de diferentes maneras según nuestro estado de ánimo.
Mostrando entradas con la etiqueta Software. Mostrar todas las entradas
Mostrando entradas con la etiqueta Software. Mostrar todas las entradas
lunes, 24 de noviembre de 2014
martes, 29 de abril de 2014
Un cerebro ‘simplificado’ permite aprender mejor el idioma
El robot humanoide iCub, en funciones desde hace varios años, ahora es capaz de entender lo que se dice y anticipar el final de una frase. Esta proeza tecnológica ha sido posible gracias al desarrollo de un ‘cerebro artificial simplificado’ que reproduce ciertos tipos de conexiones llamadas ‘recurrentes’, que se observan en el cerebro humano.
Este sistema de cerebro artificial permite que el robot aprenda y entienda nuevas oraciones con una estructura gramatical nueva. Es capaz de establecer un vínculo entre dos frases, e incluso puede predecir el final de la frase antes de que suceda.
Los investigadores del Inserm, del CNRS y de la Universidad de Lyon han tenido éxito en el desarrollo de una ‘red neuronal artificial’, construida sobre los principios fundamentales de la capacidad del cerebro humano para aprender un nuevo idioma. El modelo fue desarrollado después de años de investigación en la Unidad 846 del Inserm (Instituto de Investigación sobre las células madre y el cerebro) a través del estudio de la estructura del cerebro, y la comprensión de los procesos de aprendizaje.
Uno de los aspectos más notables del procesamiento del lenguaje es la velocidad con la que se lleva a cabo. Por ejemplo, en tiempo real nuestro cerebro procesa las primeras palabras de una frase y anticipa las siguientes, lo que mejora la velocidad con la que se procesa la información. También en tiempo real, el cerebro continuamente revisa sus predicciones a través de la interacción entre la nueva información y el contexto previamente formado.
Una consecuencia importante de la investigación es que contribuirá a que un día los robots tengan la capacidad de aprender un idioma un día.
Actualmente no es posible programar todos los conocimientos necesarios en un robot. Ahora sabemos que la forma en la que los robots adquieren su conocimiento del mundo podría lograrse parcialmente a través de un proceso de aprendizaje, de la misma manera que lo hacen los niños, explica Peter Ford Dominey, director de investigación del CNRS.
El trabajo se ha publicado en la revista PLoS ONE.
lunes, 28 de abril de 2014
Un fallo de 65 años
Durante 65 años, la mayoría de los análisis de las teorías de la información sobre los sistemas criptográficos se han hecho bajo una hipótesis matemática que, a juzgar por los resultados de un nuevo estudio, resulta que está equivocada.
La teoría de la información -la disciplina que nos dio la comunicación digital y la compresión de datos- también estableció en su día los fundamentos matemáticos de la criptografía.
Desde 1948, cuando se publicó el artículo académico en el que se presentó por vez primera la teoría de la información, la mayoría de los análisis teóricos de sistemas seguros habían dependido de una hipótesis común.
Por desgracia, tal como han comprobado unos investigadores del Instituto Tecnológico de Massachusetts (MIT) en Cambridge, Estados Unidos, y la Universidad Nacional de Irlanda en Maynooth, esa hipótesis es falsa y, como consecuencia, los dispositivos para leer tarjetas de manera inalámbrica, que se usan en muchos sistemas que no requieren introducir mecánicamente una clave para obtener el acceso, podrían no ser tan seguros como se venía asumiendo.
![]() |
| Muriel Médard. (Foto: Bryce Vickmark) |
El equipo de Ken Duffy, Mark Christiansen, Muriel Médard y Flávio du Pin Calmon duda que el fallo en la hipótesis de uniformidad signifique que los sistemas de encriptación de uso común hoy en día adolecen de brechas graves de seguridad. Lo que si puede ocurrir es que algunos de ellos sean un poco menos seguros de lo que esperábamos.
En cualquier caso, conforme se profundice en el tema, el mero hecho de averiguar cuáles son los puntos débiles seguramente revelará también las medidas idóneas para reforzarlos de manera apropiada.
Aplicaciones de lectura rápida podrian limitar la comprensión del texto
A fin de facilitarle el acceso a textos a la gente que habitualmente tiene poco tiempo para leer, los desarrolladores de aplicaciones han creado programas que leen texto escrito y lo pronuncian en voz alta a una velocidad que puede llegar a ser más rápida de lo que la necesidad de respirar permitiría a un orador humano. No se discute la utilidad de esta clase de software para los casos en los que el usuario no puede emplear la vista para mirar un texto, ya sea debido a problemas visuales o simplemente porque esté haciendo un trabajo que requiere su atención visual. De igual modo que podemos escuchar la radio mientras hacemos ciertos tipos de labores, podemos escuchar la locución de un texto realizada por una de estas aplicaciones.
Una nueva investigación, realizada por Elizabeth Schotter, Randy Tran y Keith Rayner, de la Universidad de California en la ciudad estadounidense de San Diego, sugiere que los movimientos oculares que hacemos durante la lectura desempeñan en realidad un papel fundamental en nuestra habilidad de comprender lo que acabamos de leer.
Los resultados del estudio indican específicamente que los movimientos oculares son una parte crucial del proceso de lectura. Nuestra habilidad de controlar el ritmo y la secuencia de cómo absorbemos información del texto es importante para la comprensión de éste. Nuestros cerebros controlan cómo se mueven nuestros ojos a través del texto, asegurando que consigamos la información correcta en el momento adecuado.
![]() |
| Las aplicaciones de lectura hablada rápida podrían limitar la comprensión lectora del usuario. (Imagen: Amazings / NCYT / JMC) |
Cuando leemos un texto, nuestros ojos retroceden a veces para releer porciones de él. Esto ocurre aproximadamente entre el 10 y el 15 por ciento del tiempo. Schotter, Tran y Rayner pusieron a prueba la hipótesis de que estos retrocesos podrían ser un componente fundamental de la comprensión lectora, obteniendo el ya citado resultado de que sí lo son.
viernes, 11 de abril de 2014
Software generador de chistes
Quien quiera que haya leído ciencia ficción de robots sabe que éstos no tienen sentido del humor. Por ejemplo, Daneel Olivaw bajo el pseudónimo de Eto Demerzel debe practicar muchísimo su risa falsa para asegurar al pueblo de Trantor que él no es un robot. Nunca entendí por qué en la ficción, las computadoras eran capaces de los logros más impresionantes pero “nunca aprendían a amar”.
Sin embargo el Glasgow Science Centre (que parece ser una especie de parque temático con cines y salas IMAX) está presentando una computadora que genera chistes completamente nuevos. Su aplicación era originalmente ayudar a chicos con problemas de aprendizaje a aprender el idioma pero ahora se dedica a crear chistes basados en juegos de palabras (llamados Calambures… ¿quién carajo sabía eso?). Por lo tanto, podemos decir que las computadoras pueden equipararse con la forma más baja de humano: el comediante de stand up y los escritores de sitcoms.
Los chistes, como dije, son juegos de palabras por lo que no tienen traducción al castellano. El artículo en Physorg.com nos muestra algunos que son medianamente graciosos.
Q: What kind of temperature is a son? A: A boy-ling point
Q: What do you call a shout with a window? A: A computer scream
Q: What do you call a washing machine with a september? A: An autumn-atic washer
Sin embargo el Glasgow Science Centre (que parece ser una especie de parque temático con cines y salas IMAX) está presentando una computadora que genera chistes completamente nuevos. Su aplicación era originalmente ayudar a chicos con problemas de aprendizaje a aprender el idioma pero ahora se dedica a crear chistes basados en juegos de palabras (llamados Calambures… ¿quién carajo sabía eso?). Por lo tanto, podemos decir que las computadoras pueden equipararse con la forma más baja de humano: el comediante de stand up y los escritores de sitcoms.
Los chistes, como dije, son juegos de palabras por lo que no tienen traducción al castellano. El artículo en Physorg.com nos muestra algunos que son medianamente graciosos.
Q: What kind of temperature is a son? A: A boy-ling point
Q: What do you call a shout with a window? A: A computer scream
Q: What do you call a washing machine with a september? A: An autumn-atic washer
miércoles, 9 de abril de 2014
Maze Wars 3D
Maze War (conocido también como The Maze Game, Maze Wars, Mazewar o, simplemente, Maze) es un videojuego de disparos en primera persona de gran relevancia histórica, aparecido entre 1973 y 1974.
Jugabilidad
El jugador se desplaza por un laberinto, lleno de enemigos que se mueven hacia atrás y delante, y que giran a la izquierda y a la derecha. Los jugadores van ganando puntos conforme aciertan con sus disparos a otros jugadores y los pierden cuando son abatidos. La Imlac PDS-1 por ser una computadora central permitía hasta 32 jugadores jugar simultanemente.
El sistema de juego se muestra simple comparándolo con los estándares posteriores. Los demás jugadores tienen forma de globo ocular. Cuando un jugador ve a otro, puede dispararle. Los jugadores van ganando puntos conforme aciertan con sus disparos a otros jugadores, y los pierden cuando son ellos los abatidos. Ocasionalmente, en algunas versiones, también puede aparecer un pato.
Desarrollo
Corría el año 1973 cuando Steve Colley comienza a desarrollar Maze War en la computadora Imlac PDS-1. El videojuego no se terminaría de desarrollar hasta 1974.2
Junto con Spasim, que fue desarrollado por Jim Bowery, es considerado el primer videojuego de disparos en primera persona. Posteriormente fue portado a Mac, computadora NeXT, PalmOS y Xerox Star.
Junto con Spasim, que fue desarrollado por Jim Bowery, es considerado el primer videojuego de disparos en primera persona. Posteriormente fue portado a Mac, computadora NeXT, PalmOS y Xerox Star.
Legado
Steve Colley subsecuentemente trabajo en las primeras versiones del Mars Exploration Rover para la NASA, y encontró que su trabajo de perspectiva en 3D en Maze Wars era útil para este proyecto.1
Maze War originó y extendió un gran número de conceptos usados en miles de videojuegos. Tanto su innovación como la combinación de estos elementos creó un conocimiento previo que permitió que miles de videojuegos fueran desarrollados posteriormente sin preocuparse por disputas sobre propiedad intelectual relacionadas con estas características.
Aunque se suele dar por correcto que Wolfenstein 3D fue el primer videojuego de disparos en primera persona, podría decirse que el real pionero de la perspectiva en primera persona fue Maze War, aunque, efectivamente, no sería hasta Wolfenstein 3D y, sobre todo, Doom, cuando el género se hiciera popular.
Maze War originó y extendió un gran número de conceptos usados en miles de videojuegos. Tanto su innovación como la combinación de estos elementos creó un conocimiento previo que permitió que miles de videojuegos fueran desarrollados posteriormente sin preocuparse por disputas sobre propiedad intelectual relacionadas con estas características.
Aunque se suele dar por correcto que Wolfenstein 3D fue el primer videojuego de disparos en primera persona, podría decirse que el real pionero de la perspectiva en primera persona fue Maze War, aunque, efectivamente, no sería hasta Wolfenstein 3D y, sobre todo, Doom, cuando el género se hiciera popular.
domingo, 6 de abril de 2014
4096 caracteres de código en C
Éste es el ¿absurdo? reto que propone cada año el International Obfuscated C Code Contest (IOCCC), en un intento de picar a programadores de todo el mundo hacia el extremo de la programación más enrevesada e imposible de entender.
De entre los ganadores de 2013 me ha llamado mucho la atención una auténtica obra maestra: un emulador completo de 8086 capaz de ejecutar, sobre MSDOS, AutoCAD, Windows 3.0, etc. Mejor ver algunos screenshots:
Como dice su autor, ”en tan sólo 4043 bytes (8086 nibbles, 28,301 bits), el código se las apaña para implementar casi todo el hardware de un IBM-PC de la era de 1980, usando unos pocos bits menos de código que transitores en la CPU 8086 original”.
Para los programadores más jóvenes, es necesario recordar qué era el 8086. Fue el primer procesador de Intel que realmente se popularizó, gracias al primer PC introducido por IBM en 1980/81. Su arquitectura interna era mucho más compleja e ineficaz que la del Motorola 68000, pero no siempre lo mejor acaba triunfando en el mercado…
La cuestión es que la microarquitectura del 8086 es una pesadilla, y mucho más para emularlo en tan poco código. La codificación de instrucciones es compleja e irregular en tamaño y estructura, con múltiples modos de direccionamiento y sin un posicionado consistente de operandos. Y por supuesto, el esperpéntico invento de la memoria segmentada. Además, el 8086 tiene una serie de bugs (por ejemplo, PUSH SP) y de características arcaicas que deben emularse para que los programas antiguos sigan funcionando.
En total se emulan todos estos dispositivos, que conforman un auténtico viaje al pasado:
El mismo autor reconoce que casi le cuesta un divorcio dedicar tantas horas a encajar ese puzle en tan restringido espacio.
No es el único programa en 4096 caracteres. Otro que me ha llamado la atención es este render 3D iterativo (raytracer):
Aquí está el código fuente.
Y para terminar esta friki-entrada os dejo con otras proezas, en este caso musicales, que se pueden crear con tan sólo una línea de código C:
De entre los ganadores de 2013 me ha llamado mucho la atención una auténtica obra maestra: un emulador completo de 8086 capaz de ejecutar, sobre MSDOS, AutoCAD, Windows 3.0, etc. Mejor ver algunos screenshots:
Como dice su autor, ”en tan sólo 4043 bytes (8086 nibbles, 28,301 bits), el código se las apaña para implementar casi todo el hardware de un IBM-PC de la era de 1980, usando unos pocos bits menos de código que transitores en la CPU 8086 original”.
Para los programadores más jóvenes, es necesario recordar qué era el 8086. Fue el primer procesador de Intel que realmente se popularizó, gracias al primer PC introducido por IBM en 1980/81. Su arquitectura interna era mucho más compleja e ineficaz que la del Motorola 68000, pero no siempre lo mejor acaba triunfando en el mercado…
La cuestión es que la microarquitectura del 8086 es una pesadilla, y mucho más para emularlo en tan poco código. La codificación de instrucciones es compleja e irregular en tamaño y estructura, con múltiples modos de direccionamiento y sin un posicionado consistente de operandos. Y por supuesto, el esperpéntico invento de la memoria segmentada. Además, el 8086 tiene una serie de bugs (por ejemplo, PUSH SP) y de características arcaicas que deben emularse para que los programas antiguos sigan funcionando.
- CPU Intel 8086/186
- 1MB de RAM
- 8072A 3.5″ floppy disk controller (1.44MB/720KB)
- Contrlador de disco duro (hasta 528MB)
- Tarjeta gráfica Hercules, gráficos 720×348 de 2 colores, 64KB de video RAM y suporte de modo texto CGA 80×25 a 16 colores.
- 8253 programmable interval timer (PIT).
- 8259 programmable interrupt controller (PIC).
- Controlador de teclado 8042, con teclado de 83 teclas tipo XT.
- Reloj de tiempo real MC146818.
- PC speaker.
#include "SDL.h"
#define $ for(O=9
#define CX M+=(T%3+2*!(!T*t-6))
#define x ,A=4*!T,O=t,W=h=T<3?u(Q?p:D(A+3),D(A),D(A+1)[i]+D(A+2)*g+):K(t),U=V=K(a),o?U=h,W=V:V,
#define C 8*-~L
#define Z short
#define y a(Z)Y[++O]
#define B ),a--||(
#define _ ),e--||(
#define V(I,D,E)(O=a(I)h[r])&&!(A=(D)(V=(1[E+L]<<16)+*i)/O,A-(I)A)?1[E+L]=V-O*(*E=A):H(0)
#define i(B,M)B(o){return M;}
#define R(O,M,_)(S=L?a(I Z)O:O,N=L?a(I Z)O M(f=a(I Z)_):(O M(f=a(I n)_)))
#define T(_)R(r[u(10,L=4,--)],=,_)
#define u(a,r,T)16*i[a]+(I Z)(T i[r])
#define a(_)*(_*)&
#define L(_)M(W,_,U)
#define M(S,F,T)R(r[S],F,r[T])
#define A(_)(i[L=4]+=2,R(_,=,r[u(10,4,-2+)]))
#define c(R,T)(1[u=19,L+T]=(N=a(R)h[r]*(R)*T)>>16,*i=N,G(F(N-(R)N)))
#define h(_)(1&(L?a(Z)_:_)>>C-1)
#define I unsigned
#define n char
#define e(_)v(F(40[L(_##=40[E]+),E]&N==S|_ N<_(int)S))
I n t,e,l[80186],*E,m,u,L,a,T,o,r[1<<21],X,*Y,b,Q=0,R=0;I Z*i,M,p,q=3;I*localtime(),f,S,kb=0,h,W,U,c,g,d,V,A;N,O,P=983040,j[5];SDL_Surface*k=0;i(K,P+(L?2*o:2*o+o/4&7))i(D,r[a(I)E[259+4*o]+O])i(w,i[o]+=~(-2*47[E])*~L)i(v,(z((f^=S^N)&16),G(N-S&&1&(40[E]^f>>C-1))))J(){V=61442;$;O--;)V+=40[E+O]<<D(25);}i(H,(46[u=76,J(),T(V),T(9[i]),T(M),M(P+18,=,4*o+2),R(M,=,r[4*o]),E]=0))s(o){$;O--;)40[E+O]=1&&1<<D(25)&o;}i(BP,(*i+=262*o*z(F((*E&15)>9|42[E])),*E&=15))i(SP,(w(7),R&&--1[i]&&o?R++,Q&&Q++,M--:0))DX(){$,O*=27840;O--;)O[(I*)k->pixels]=-!!(1<<7-O%8&r[O/2880*90+O%720/8+(88+952[l]/128*4+O/720%4<<13)]);SDL_Flip(k);}main(BX,nE)n**nE;{9[i=E=r+P]=P>>4;$;q;)j[--q]=*++nE?open(*nE,32898):0;read(2[a(I)*i=*j?lseek(*j,0,2)>>9:0,j],E+(M=256),P);$;Y=r+16*9[i]+M,Y-r;Q|R||kb&46[E]&&KB)--64[T=1[O=32[L=(X=*Y&7)&1,o=X/2&1,l]=0,t=(c=y)&7,a=c/8&7,Y]>>6,g=~-T?y:(n)y,d=BX=y,l],!T*t-6&&T-2?T-1?d=g:0:(d=y),Q&&Q--,R&&R--x(O=*Y,O=u=D(51),e=D(8),m=D(14)_ O=*Y/2&7,M+=(n)c*(L^(D(m)[E]|D(22)[E]|D(23)[E]^D(24)[E]))_ L=*Y&8,R(K(X)[r],=,c)_ L=e+=3,o=0,a=X x a=m _ T(X[i])_ A(X[i])_ a<2?M(U,+=1-2*a+,P+24),v(f=1),G(S+1-a==1<<C-1),u=u&4?19:57:a-6?CX+2,a-3||T(9[i]),a&2&&T(M),a&1&&M(P+18,=,U+2),R(M,=,U[r]),u=67:T(h[r])_(W=U B u=m,M-=~L,R(W[r],&,d)B 0 B L(=~)B L(=-),S=0,u=22,F(N>S)B L?c(I Z,i):c(I/**/n,E)B L?c(Z,i):c(n,E)B L?V(I Z,I,i):V(I n,I Z,E)B L?V(Z,int,i):V(n,Z,E))_++e,h=P,d=c,T=3,a=m,M--_++e,13[W=h,i]=(o|=!L)?(n)d:d,U=P+26,M-=~!o,u=17+(m=a)_(a=m B L(+=),F(N<S)B L(|=)B e(+)B e(-)B L(&=)B L(-=),F(N>S)B L(^=)B L(-),F(N>S)B L(=))_!L?L=a+=8 x L(=):!o?Q=1,R(r[p=m x V],=,h):A(h[r])_ T=a=0,t=6,g=c x M(U,=,W)_(A=h(h[r]),V=m?++M,(n)g:o?31&2[E]:1)&&(a<4?V%=a/2+C,R(A,=,h[r]):0,a&1?R(h[r],>>=,V):R(h[r],<<=,V),a>3?u=19:0,a<5?0:F(S>>V-1&1)B R(h[r],+=,A>>C-V),G(h(N)^F(N&1))B A&=(1<<V)-1,R(h[r],+=,A<<C-V),G(h(N*2)^F(h(N)))B R(h[r],+=(40[E]<<V-1)+,A>>1+C-V),G(h(N)^F(A&1<<C-V))B R(h[r],+=(40[E]<<C-V)+,A<<1+C-V),F(A&1<<V-1),G(h(N)^h(N*2))B G(h(N)^F(h(S<<V-1)))B G(h(S))B 0 B V<C||F(A),G(0),R(h[r],+=,A*=~((1<<C)-1>>V)))_(V=!!--1[a=X,i]B V&=!m[E]B V&=m[E]B 0 B V=!++1[i]),M+=V*(n)c _ M+=3-o,L?0:o?9[M=0,i]=BX:T(M),M+=o*L?(n)c:c _ M(U,&,W)_ L=e+=8,W=P,U=K(X)_!R||1[i]?M(m<2?u(8,7,):P,=,m&1?P:u(Q?p:11,6,)),m&1||w(6),m&2||SP(1):0 _!R||1[i]?M(m?P:u(Q?p:11,6,),-,u(8,7,)),43[u=92,E]=!N,F(N>S),m||w(6),SP(!N==b):0 _ o=L,A(M),m&&A(9[i]),m&2?s(A(V)):o||(4[i]+=c)_ R(U[r],=,d)_ 986[l]^=9,R(*E,=,l[m?2[i]:(n)c])_ R(l[m?2[i]:(n)c],=,*E)_ R=2,b=L,Q&&Q++_ W-U?L(^=),M(U,^=,W),L(^=):0 _ T(m[i])_ A(m[i])_ Q=2,p=m,R&&R++_ L=0,O=*E,F(D(m+=3*42[E]+6*40[E])),z(D(1+m)),N=*E=D(m-1)_ N=BP(m-1)_ 1[E]=-h(*E)_ 2[i]=-h(*i)_ 9[T(9[i]),T(M+5),i]=BX,M=c _ J(),T(V)_ s(A(V))_ J(),s((V&~m)+1[E])_ J(),1[E]=V _ L=o=1 x L(=),M(P+m,=,h+2)_++M,H(3)_ M+=2,H(c&m)_++M,m[E]&&H(4)_(c&=m)?1[E]=*E/c,N=*E%=c:H(0)_*i=N=m&E[L=0]+c*1[E]_*E=-m[E]_*E=r[u(Q?p:m,3,*E+)]_ m[E]^=1 _ E[m/2]=m&1 _ R(*E,&,c)_(a=c B write(1,E,1)B time(j+3),memcpy(r+u(8,3,),localtime(j+3),m)),a<2?*E=~lseek(O=4[E][j],a(I)5[i]<<9,0)?(a?write:read)(O,r+u(8,3,),*i):0:0),O=u,D(16)?v(0):D(17)&&G(F(0)),CX*D(20)+D(18)-D(19)*~!!L,D(15)?O=m=N,41[43[44[E]=h(N),E]=!N,E]=D(50):0,!++q?
kb=1,*l?SDL_PumpEvents(),k=k?k:SDL_SetVideoMode(720,348,32,0),DX():k?SDL_Quit(),k=0:0:0;}
i(F,40[E]=!!o)i(z,42[E]=!!o)i(G,48[E]=o)
#define $ for(O=9
#define CX M+=(T%3+2*!(!T*t-6))
#define x ,A=4*!T,O=t,W=h=T<3?u(Q?p:D(A+3),D(A),D(A+1)[i]+D(A+2)*g+):K(t),U=V=K(a),o?U=h,W=V:V,
#define C 8*-~L
#define Z short
#define y a(Z)Y[++O]
#define B ),a--||(
#define _ ),e--||(
#define V(I,D,E)(O=a(I)h[r])&&!(A=(D)(V=(1[E+L]<<16)+*i)/O,A-(I)A)?1[E+L]=V-O*(*E=A):H(0)
#define i(B,M)B(o){return M;}
#define R(O,M,_)(S=L?a(I Z)O:O,N=L?a(I Z)O M(f=a(I Z)_):(O M(f=a(I n)_)))
#define T(_)R(r[u(10,L=4,--)],=,_)
#define u(a,r,T)16*i[a]+(I Z)(T i[r])
#define a(_)*(_*)&
#define L(_)M(W,_,U)
#define M(S,F,T)R(r[S],F,r[T])
#define A(_)(i[L=4]+=2,R(_,=,r[u(10,4,-2+)]))
#define c(R,T)(1[u=19,L+T]=(N=a(R)h[r]*(R)*T)>>16,*i=N,G(F(N-(R)N)))
#define h(_)(1&(L?a(Z)_:_)>>C-1)
#define I unsigned
#define n char
#define e(_)v(F(40[L(_##=40[E]+),E]&N==S|_ N<_(int)S))
I n t,e,l[80186],*E,m,u,L,a,T,o,r[1<<21],X,*Y,b,Q=0,R=0;I Z*i,M,p,q=3;I*localtime(),f,S,kb=0,h,W,U,c,g,d,V,A;N,O,P=983040,j[5];SDL_Surface*k=0;i(K,P+(L?2*o:2*o+o/4&7))i(D,r[a(I)E[259+4*o]+O])i(w,i[o]+=~(-2*47[E])*~L)i(v,(z((f^=S^N)&16),G(N-S&&1&(40[E]^f>>C-1))))J(){V=61442;$;O--;)V+=40[E+O]<<D(25);}i(H,(46[u=76,J(),T(V),T(9[i]),T(M),M(P+18,=,4*o+2),R(M,=,r[4*o]),E]=0))s(o){$;O--;)40[E+O]=1&&1<<D(25)&o;}i(BP,(*i+=262*o*z(F((*E&15)>9|42[E])),*E&=15))i(SP,(w(7),R&&--1[i]&&o?R++,Q&&Q++,M--:0))DX(){$,O*=27840;O--;)O[(I*)k->pixels]=-!!(1<<7-O%8&r[O/2880*90+O%720/8+(88+952[l]/128*4+O/720%4<<13)]);SDL_Flip(k);}main(BX,nE)n**nE;{9[i=E=r+P]=P>>4;$;q;)j[--q]=*++nE?open(*nE,32898):0;read(2[a(I)*i=*j?lseek(*j,0,2)>>9:0,j],E+(M=256),P);$;Y=r+16*9[i]+M,Y-r;Q|R||kb&46[E]&&KB)--64[T=1[O=32[L=(X=*Y&7)&1,o=X/2&1,l]=0,t=(c=y)&7,a=c/8&7,Y]>>6,g=~-T?y:(n)y,d=BX=y,l],!T*t-6&&T-2?T-1?d=g:0:(d=y),Q&&Q--,R&&R--x(O=*Y,O=u=D(51),e=D(8),m=D(14)_ O=*Y/2&7,M+=(n)c*(L^(D(m)[E]|D(22)[E]|D(23)[E]^D(24)[E]))_ L=*Y&8,R(K(X)[r],=,c)_ L=e+=3,o=0,a=X x a=m _ T(X[i])_ A(X[i])_ a<2?M(U,+=1-2*a+,P+24),v(f=1),G(S+1-a==1<<C-1),u=u&4?19:57:a-6?CX+2,a-3||T(9[i]),a&2&&T(M),a&1&&M(P+18,=,U+2),R(M,=,U[r]),u=67:T(h[r])_(W=U B u=m,M-=~L,R(W[r],&,d)B 0 B L(=~)B L(=-),S=0,u=22,F(N>S)B L?c(I Z,i):c(I/**/n,E)B L?c(Z,i):c(n,E)B L?V(I Z,I,i):V(I n,I Z,E)B L?V(Z,int,i):V(n,Z,E))_++e,h=P,d=c,T=3,a=m,M--_++e,13[W=h,i]=(o|=!L)?(n)d:d,U=P+26,M-=~!o,u=17+(m=a)_(a=m B L(+=),F(N<S)B L(|=)B e(+)B e(-)B L(&=)B L(-=),F(N>S)B L(^=)B L(-),F(N>S)B L(=))_!L?L=a+=8 x L(=):!o?Q=1,R(r[p=m x V],=,h):A(h[r])_ T=a=0,t=6,g=c x M(U,=,W)_(A=h(h[r]),V=m?++M,(n)g:o?31&2[E]:1)&&(a<4?V%=a/2+C,R(A,=,h[r]):0,a&1?R(h[r],>>=,V):R(h[r],<<=,V),a>3?u=19:0,a<5?0:F(S>>V-1&1)B R(h[r],+=,A>>C-V),G(h(N)^F(N&1))B A&=(1<<V)-1,R(h[r],+=,A<<C-V),G(h(N*2)^F(h(N)))B R(h[r],+=(40[E]<<V-1)+,A>>1+C-V),G(h(N)^F(A&1<<C-V))B R(h[r],+=(40[E]<<C-V)+,A<<1+C-V),F(A&1<<V-1),G(h(N)^h(N*2))B G(h(N)^F(h(S<<V-1)))B G(h(S))B 0 B V<C||F(A),G(0),R(h[r],+=,A*=~((1<<C)-1>>V)))_(V=!!--1[a=X,i]B V&=!m[E]B V&=m[E]B 0 B V=!++1[i]),M+=V*(n)c _ M+=3-o,L?0:o?9[M=0,i]=BX:T(M),M+=o*L?(n)c:c _ M(U,&,W)_ L=e+=8,W=P,U=K(X)_!R||1[i]?M(m<2?u(8,7,):P,=,m&1?P:u(Q?p:11,6,)),m&1||w(6),m&2||SP(1):0 _!R||1[i]?M(m?P:u(Q?p:11,6,),-,u(8,7,)),43[u=92,E]=!N,F(N>S),m||w(6),SP(!N==b):0 _ o=L,A(M),m&&A(9[i]),m&2?s(A(V)):o||(4[i]+=c)_ R(U[r],=,d)_ 986[l]^=9,R(*E,=,l[m?2[i]:(n)c])_ R(l[m?2[i]:(n)c],=,*E)_ R=2,b=L,Q&&Q++_ W-U?L(^=),M(U,^=,W),L(^=):0 _ T(m[i])_ A(m[i])_ Q=2,p=m,R&&R++_ L=0,O=*E,F(D(m+=3*42[E]+6*40[E])),z(D(1+m)),N=*E=D(m-1)_ N=BP(m-1)_ 1[E]=-h(*E)_ 2[i]=-h(*i)_ 9[T(9[i]),T(M+5),i]=BX,M=c _ J(),T(V)_ s(A(V))_ J(),s((V&~m)+1[E])_ J(),1[E]=V _ L=o=1 x L(=),M(P+m,=,h+2)_++M,H(3)_ M+=2,H(c&m)_++M,m[E]&&H(4)_(c&=m)?1[E]=*E/c,N=*E%=c:H(0)_*i=N=m&E[L=0]+c*1[E]_*E=-m[E]_*E=r[u(Q?p:m,3,*E+)]_ m[E]^=1 _ E[m/2]=m&1 _ R(*E,&,c)_(a=c B write(1,E,1)B time(j+3),memcpy(r+u(8,3,),localtime(j+3),m)),a<2?*E=~lseek(O=4[E][j],a(I)5[i]<<9,0)?(a?write:read)(O,r+u(8,3,),*i):0:0),O=u,D(16)?v(0):D(17)&&G(F(0)),CX*D(20)+D(18)-D(19)*~!!L,D(15)?O=m=N,41[43[44[E]=h(N),E]=!N,E]=D(50):0,!++q?
kb=1,*l?SDL_PumpEvents(),k=k?k:SDL_SetVideoMode(720,348,32,0),DX():k?SDL_Quit(),k=0:0:0;}
i(F,40[E]=!!o)i(z,42[E]=!!o)i(G,48[E]=o)
El mismo autor reconoce que casi le cuesta un divorcio dedicar tantas horas a encajar ese puzle en tan restringido espacio.
No es el único programa en 4096 caracteres. Otro que me ha llamado la atención es este render 3D iterativo (raytracer):
Aquí está el código fuente.
Y para terminar esta friki-entrada os dejo con otras proezas, en este caso musicales, que se pueden crear con tan sólo una línea de código C:
Diseñan algoritmos para mejorar el control de robots a través de Internet
Investigadores del Grupo de Robótica Inteligente (MAPIR) perteneciente al departamento de Ingeniería de Sistemas y Automática de la Universidad de Málaga han diseñado una aplicación web que garantiza la continuidad y fiabilidad del control remoto de robots móviles cuando algunos de los componentes del sistema, como por ejemplo Internet, produzcan retardos impredecibles en los tiempos de comunicación.
Los robots móviles controlados remotamente son dispositivos complejos que incorporan tres elementos. Por un lado, una red de comunicaciones como Internet, por otro, la propia plataforma robótica móvil y, finalmente, el software utilizado a todos los niveles para que el conjunto funcione. “Todo este sistema debe actuar de la manera más fiable posible, ya que deben interactuar con su entorno de manera segura. Por ejemplo, pueden realizar labores como operaciones médicas en remoto, tareas de vigilancia y rescate o asistencia a personas mayores”, expone a la Fundación Descubre el responsable de la investigación, Juan Antonio Fernández Madrigal de la Universidad de Málaga.
Los expertos han diseñado una aplicación para superar el obstáculo de la interrupción o pérdida de calidad del control robótico debidos a la conexión a Internet, que produce retardos no predecibles en las transmisiones o están relacionadas con otros componentes impredecibles. En su artículo, ‘Marginal ProbabilisticModeling of theDelays in theSensory Data Transmission of NetworkedTelerobots’ publicado en la revista Sensors, los expertos describen un conjunto de modelos y algoritmos que posibilitan anticiparse a este tipo de fallos y ajustar la cantidad de información mostrada al operador dinámicamente, de forma que se consigue un sistema de teleoperación adaptable a muy diversas circunstancias, posiblemente cambiantes.
Hasta ahora, los expertos han abordado estos problemas dotando de más inteligencia al propio robot, para que tome decisiones de manera autónoma si no le llegan órdenes a través de la red en los tiempos especificados. Por su parte, los investigadores de la Universidad de Málaga enfocan su modelo desde otra perspectiva. “Monitorizamos la red y el resto de componentes, observando cuánto tardan en transmitir los datos en cada momento, y deducimos las probabilidades de que ‘soporten’ la tarea que debemos acometer en ese preciso instante. Por ejemplo, si necesitamos obtener una imagen del entorno obtenida de una de las cámaras del robot, podemos elegir recibirla con más o menos resolución y en color o en blanco y negro, en función de los retardos que tengamos en ese momento”, explica.
Modelos matemáticos
Ajustando los datos que es capaz de transmitir el sistema a la tarea que hay que acometer en cada momento se evita que los retardos provoquen errores en el control remoto del robot. Para ello utilizan modelos basados en distribuciones de probabilidad. “Éstos son novedosos por su simplicidad y porque algunos de ellos no se habían utilizado antes para modelar este tipo de retardos, sino para otras aplicaciones completamente distintas como la predicción de lluvias. Se trata de algoritmos matemáticos que pueden ejecutarse eficientemente en los ordenadores que controlan el robot y también en los del operador remoto, que suelen contar con una potencia limitada si son, por ejemplo, dispositivos móviles tipo tablets o smartphones.”, subraya.
Además de esta gran capacidad de cálculo con los recursos limitados que ofrecen los dispositivos móviles, el sistema ofrece otras ventajas como la adaptación a la capacidad de transmisión en cada momento y la rápida toma de decisiones. La aplicación se materializa en una interfaz donde el usuario ve la información de todos los sensores que tiene el robot. El sistema va decidiendo qué datos recibir y a qué renunciar en función de la disponibilidad de tiempo, de forma automática. “Por ejemplo, si hay escasa señal de wifi, la imagen de una cámara puede irse a blanco y negro o incluso el propio interfaz puede renunciar a mostrarla, optando por activar otros sensores más eficientes para la misma tarea. El objetivo es que sigamos recibiendo información suficiente a tiempo, con el mínimo retardo”, ejemplifica.
Pruebas para tareas de vigilancia
Los científicos han probado el sistema en robots de laboratorio capaces de ejecutar en remoto tareas de vigilancia, que consisten en explorar edificios tomando datos sensoriales del entorno que luego son analizados por el vigilante. “En este caso el usuario recibe un flujo aproximadamente constante de datos a pesar de los altibajos que pueda haber en la red o en otros componentes. El operario puede dirigir correctamente al robot sirviéndose de imágenes o de datos de otros sensores, en función del ancho de banda. Esto supone que el interfaz muestra lo que ve una videocámara o sónares para la ubicación del robot en el entorno, dependiendo de que tenga más o menos potencia de transmisión”, subraya Fernández Madrigal.
Estos resultados son fruto del proyecto de excelencia titulado ‘Control Remoto Óptimo y Adaptable de Robots Móviles con Componentes No Deterministas’ financiado por la Consejería de Economía, Innovación, Ciencia y Empleo de la Junta de Andalucía y por fondos FEDER. Asimismo, los expertos siguen explorando las aplicaciones del sistema más allá de esta investigación enfocada a la robótica móvil, en otras áreas que requieran la optimización de tiempos de transmisión de datos, como telepresencia, videovigilancia, videoconferencias o el cuidado de pacientes a distancia.
Inteligencia en juegos para móviles
Para garantizar el éxito comercial de los videojuegos para móviles es necesario asegurar un algoritmo de Inteligencia Artificial que suponga al jugador un desafío ni demasiado elevado ni demasiado bajo.
![]() |
| tekken tag tournament |
En estos casos muchos de los agentes IA pueden presentar un comportamiento más aleatorio que inteligente, por lo que se precisa el uso de algoritmos de inferencia por parte de la máquina que le permitan intuir las intenciones del oponente, tal y como hacemos los seres humanos.
La mejor forma en la que un algoritmo IA obtendría información de su oponente sería infiriendo información sobre su estilo de juego y de su tendencia a reaccionar ante determinadas situaciones. Por tanto el algoritmo de aprendizaje iría compilando un perfil del comportamiento de dicho jugador. Así, cada comportamiento podría ser identificado con una clase o categoría: jugador agresivo, esquivo, etc. Al fin y al cabo de lo que se trata es de un problema de reconocimiento de patrones.
| Diagrama |
Hay básicamente dos métodos de predicción:
- discriminativo
- no-discriminativo.
Predicción discriminativa
Uno de los métodos de clasificación discriminativa más eficaces son las máquinas de soporte vectorial o SVM (Support Vector Machine). Sin entrar en detalles matemáticos, un algoritmo basado en SVM construye un modelo capaz de predecir si una muestra nueva (cuya categoría desconocemos) pertenece a una categoría o a la otra.
![]() |
| PAC-MAN malo malo |
Predicción no-discriminativa
Por el contrario, el modelo no-discriminativo o bayesiano estimaría la predicción en base a la regla de Bayes (la probabilidad de que un jugador realice tal movimiento, dado que antes ha realizado este otro) y entonces cada nueva instancia se compararía con la clase más probable.
Así, el sistema no discriminativo tiende a ser más eficiente en dispositivos móviles, ya que consume menos recursos computacionales que los métodos discriminativos, a pesar de que estos últimos presenten un mejor desempeño deliberativo. Por tanto se adapta mejor a juegos donde necesitamos un mayor procesamiento de datos en tiempo real con muchas fuentes de incertidumbre (por ejemplo el mítico StarCraft, que por cierto estará disponible muy pronto en Android mediante controles táctiles).
![]() |
| STARCRAFT |
sábado, 5 de abril de 2014
Las tres leyes
http://www.last.fm/robots.txt
Lo extremadamente friki del fichero de esta web en particular son las 3 líneas que hay sobre el final:
Disallow: /harming/humans
Disallow: /ignoring/human/orders
Disallow: /harm/to/selfAunque robots.txt es un protocolo de facto para decirle a Google y otros indexadores webs qué URLs explorar y cuales no, está claro que esas tres no son URLs precisamente… si alguien aún no las ha reconocido, estas son las Tres Leyes de la Robótica de Issac Asimov:
- Un robot no debe dañar a un ser humano o, por su inacción, dejar que un ser humano sufra daño.
- Un robot debe obedecer las órdenes que le son dadas por un ser humano, excepto si estas órdenes entran en conflicto con la Primera Ley.
- Un robot debe proteger su propia existencia, hasta donde esta protección no entre en conflicto con la Primera o la Segunda Ley.
viernes, 28 de marzo de 2014
Los memes evolucionan como los seres vivos
Una de las ideas más impactantes sobre la vida es que ésta es básicamente información, ni agua, ni carbono, ni ninguna otra base material concreta son estrictamente necesarias: tan sólo información y el proceso de evolución. La vida es independiente del sustrato; tanto es así que puede evolucionar in silico, en una simulación por ordenador, si bien de esta manera sólo se han conseguido formas muy elementales.
Enjambrenoides
Cuando observamos la decidida actividad colectiva de las hormigas y otros insectos sociales tenemos la sensación de que es inteligente. Puede que sea una ilusión. Pero puede que sea una ilusión lo suficientemente buena como para que los expertos en computación saquen provecho de ella.
jueves, 27 de marzo de 2014
Lógica temporal
Es un pequeño paso para la capacidad de cálculo pero un gran salto para los robots “inteligentes”. Un grupo de ingenieros de la Universidad de Southampton (Reino Unido), encabezado por Sandor Veres, ha desarrollado un método para equipar (en principio) las naves espaciales y los satélites con capacidades de razonamiento casi humanas, lo que les permitiría tomar decisiones importantes por sí mismos. El nuevo sistema de control, denominado Sysbrain, permitirá programar los vehículos espaciales en lenguaje natural para que eviten accidentes, arreglen sus fallos, y puede que hasta para que salven la Tierra del impacto de un asteroide, y todo sin que los humanos los guíen paso a paso.
El nuevo sistema se está probando actualmente en el laboratorio usando un grupo de satélites modelo que operan en un entorno que simula las condiciones del espacio. Los modelos “se dan cuenta” de su entorno, pueden prever el futuro probable, realizar planes y ejecutarlos. Parece más cercano (por alejado que pueda estar) al razonamiento humano, que la capacidad de encontrar una pregunta a una respuesta tirando de bases de datos a gran escala, como hace Watson.
Vamos a explicar un poco en detalle en que se diferencia el funcionamiento de estos sistemas de una instrucción de un videojuego del estilo “si pasa por aquí entonces este soldado sale de aquí y el otro dispara así”. A través de sus sensores el vehículo observa continuamente su entorno, por ejemplo la posición de otros vehículos. El sistema proyecta continuamente sus visión del estado del mundo en cada momento hacia el futuro cercano y “deduce” afirmaciones acerca de lo que está pasando, por ejemplo “ese satélite está en ruta de colisión conmigo”. De la misma forma que los robots de Asimov tenían una serie de leyes grabadas a fuego que no podían violar, estos sistemas tienen preprogramadas unas reglas de comportamiento, por ejemplo “evitar colisiones” (los humanos también las tenemos, pero las llamamos instintos). A partir de aquí hacen uso de la inferencia lógica para decidir qué acción tomar.
La capacidad de las máquinas de pensar lógicamente viene de un sistema matemático llamado lógica temporal, cuyas raíces se hunden en el siglo X y las matemáticas persas. Al igual que otros sistemas lógicos, la lógica temporal proporciona un marco en el que representar afirmaciones sobre el mundo en un lenguaje formal y establece reglas de inferencia lógica que pueden ser implementadas en un ordenador. Por ejemplo, si sabemos que una afirmación P (“algo se mueve hacia mi”) implica la consecuencia Q (“habrá una colisión”), entonces si observamos que la afirmación P es cierta realmente, podemos inmediatamente deducir que la afirmación Q también lo es. La lógica temporal tiene la característica añadida de ser capaz de enfrentarse con afirmaciones que pueden cambiar con el tiempo: así, en sistemas más simples la afirmación “algo se mueve hacia mi” o es verdadera o es falsa pero, en lógica temporal, el valor de verdad puede cambiar con el tiempo, dependiendo de otros factores. Esto permite a la máquina explorar secuencias de acontecimientos y las implicaciones de cualquier curso de acción que pueda decidir tomar.
La prevención de colisiones es sólo un ejemplo sencillo de lo que Sysbrain puede permitir que las máquinas hagan. Otro ejemplo en el que están trabajando los técnicos es el caso en el que uno de los impulsores de la nave falle. El sistema detectaría el problema y reconfiguraría sus controles antes de que pudiese ocurrir algo más grave. El sistema lo haría muchísimo más rápido de lo que lo podría hacer cualquier humano, usando una ínfima parte de su capacidad de procesamiento.
Pero la velocidad no es la única ventaja para una nave espacial que puede tomar sus propias decisiones. Cuando una nave está lejos de la Tierra la comunicación con el centro de control tiene un retardo, lo que una misión compleja no puede permitirse. Imaginemos que se desarrollan naves para evitar que los asteroides de determinado tamaño impacten con la Tierra. Si una de ellas operara en las proximidades de Marte y detectase un asteroide rumbo a la Tierra, la alerta tardaría de 8 a 23 minutos sólo en llegar al centro de control; el personal del centro tiene que recibir, comprender, evaluar las opciones posibles, decidir qué hacer y emitir un mensaje que tardará otros de 8 a 23 minutos en llegar a la nave. No es operativo. Una misión como esa sería compleja: seguir el curso del asteroide, contactarlo y obligarlo a cambiar rumbo; algo que no es imposible según ha demostrado el equipo de Veres.
Lo que hace a la nueva tecnología particularmente fácil de usar es el hecho de que usa lenguaje natural para programarla. Se usan de hecho frases en inglés simplificadas, con una estructura determinada y un vocabulario limitado, que el sistema traduce inmediatamente a lenguaje de programación de alto nivel.
Los modelos que están usando Sysbrain de momento sólo operan en el laboratorio. Habrá que probarlos en entornos más complejos antes de instalarlos en un costoso satélite o en una sonda de altísima tecnología. Por ahora el equipo ya está en conversaciones con la NASA y la ESA.
miércoles, 26 de marzo de 2014
martes, 25 de marzo de 2014
Robotica inspirada en la biologia
A través de la experimentación y la simulación, los científicos son capaces de obtener una comprensión de los mecanismos biológicos subyacentes involucrados en los organismos vivos. Estos mecanismos, tanto de comportamiento y estructurales, sirven como fuente de inspiración en el desarrollo de redes neuronales basadas en arquitecturas robóticas. Algunos ejemplos de animales que sirven como fuente de inspiración para los sistemas robóticos son ranas y sapos, mantis religiosa y cucarachas. Para hacer frente a la complejidad que subyace en la construcción de este tipo de inspiración biológica, los sistemas robóticos basados en redes neuronales suelen distinguir entre dos niveles diferentes de modelos, esquemas de comportamiento y la estructura (RNA):
sábado, 22 de marzo de 2014
Nueva tesis mejora el modelo para el procesamiento de imágenes
La tesis de Miguel Pagola Barrio, dirigida por Humberto Bustince Sola, del Departamento de Automática y Computación de la Universidad Pública de Navarra, se centra en la umbralización o segmentación de imágenes, de manera que partiendo de una imagen digital se puedan definir y extraer, de modo automatizado, las zonas que nos interesen. La aplicación de estas técnicas es muy variada y va desde el diagnóstico médico —en detección del cáncer de mama o de próstata— hasta las líneas de producción robotizadas.
Miguel Pagola Barrio, licenciado en Ingeniería Industrial, es en la actualidad profesor ayudante de Ciencias de la computación e inteligencia artificial en la Universidad Pública de Navarra. Su tesis Representación de la incertidumbre con conjuntos intervalo-valorados fuzzy. Aplicación a la umbralización de imágenes ha obtenido la calificación de sobresaliente cum laude.
Pagola Barrio fue profesor visitante en la Universidad Monfort de Leicester (Reino Unido) y, en su trayectoria investigadora, ha publicado una decena de artículos en revistas de referencia, ha participado en once conferencias internacionales y seis nacionales y ha colaborado en la elaboración de capítulos en cuatro libros. Además, ha participado en cuatro proyectos de investigación sobre inteligencia artificial; entre ellos, uno relativo a la aplicación de las técnicas fuzzy en el diagnóstico de melanomas y otro sobre control de trayectorias de robots móviles autónomos.
"Pensemos en una imagen cualquiera: un objeto y un fondo —explica—. Cuando tú tienes una imagen digital, desde el momento en que pasas de tres a dos dimensiones la información no coincide con la imagen real y, aunque a simple vista parezca todo claro, cuando la analizas con detalle lo que ves es un montón de píxeles (la menor unidad que forma parte de una imagen digital) donde es difícil extraer bordes y formas nítidas".
Por ejemplo, en el cáncer de mama o de próstata, las zonas más oscuras de la imagen médica suelen ser las que están afectadas. "Pero esa imagen hecha por ultrasonidos, que es de muy mala calidad, el médico tiene que segmentarla a mano y a partir de ahí, en comparación con la misma imagen obtenida meses atrás, calcular en qué medida ha aumentado el cáncer. Hacerlo a mano les cuesta un tiempo y lo ideal es que el ordenador haga todo ese trabajo y mida automáticamente esos cambios", señala Pagola.
Ésa es la idea de lo que debería ocurrir. Y la teoría fuzzy o de lógica difusa lo que hace es trabajar con esa incertidumbre: representa esos casos difíciles mediante algoritmos (conjunto finito de instrucciones que sirven para ejecutar una tarea o resolver un problema). «Se está investigando mucho en todos estos temas y actualmente, con los algoritmos que creamos, se llega al 80-90%, pero no al 100% de seguridad». No obstante, gracias al procesamiento de imágenes con estas técnicas fuzzy, los profesionales médicos cuentan con un elemento más de apoyo a la hora de realizar sus diagnósticos, ya que pueden delimitar con mayor exactitud si la imagen que ven corresponde o no a una célula cancerosa.
En los últimos años se está dedicando gran esfuerzo investigador a este campo del procesamiento de imágenes. Sus aplicaciones son variadas, desde el ya señalado diagnóstico médico hasta las cámaras de seguridad para identificación de personas, coches inteligentes que puedan identificar señales de tráfico, robótica, etc.
Representación de la incertidumbre
La base de toda la tesis de Miguel Pagola está en el algoritmo de intervalo-valorización, aplicado por primera vez por el ingeniero de la universidad canadiense de Waterloo, Hamid Tizhoosh. "Por ejemplo, con la matemática clásica, en una imagen digital un pixel corresponde al fondo y le damos un valor de 0 ó 1. Pero con la lógica difusa, si no estamos seguros de a qué pertenece (al fondo o al objeto), le damos un grado de pertenencia: 0,5 ó 0,6. Pues bien, con los algoritmos de intervalo-valorización, en lugar de dar un grado de pertenencia le asignamos un intervalo: entre 0,5 y 0,6. Por eso le llamamos representación de la incertidumbre, porque le pedimos que nos mida el desconocimiento que tenemos a la hora de establecer esos parámetros".
Esta es la materia en la que se ha centrado el autor de la tesis, que se muestra satisfecho por "haber mejorado el algoritmo de intervalos, haber conseguido calcular la incertidumbre de manera cada vez más automática".
Aun así, Miguel Pagola aclara que los algoritmos "no son totalmente automáticos; tú no le dices al ordenador ‘segméntame esta imagen’ sino que le tienes que indicar dos funciones de pertenencia y, a partir de ahí, él trabaja". Por ejemplo, imaginemos una línea de producción robotizada: una cinta que transporta naranjas y un brazo robótico que, a través de unas cámaras, obtiene una imagen de la cinta con las naranjas, la segmenta, determina dónde está el centro de la naranja, la coge y la coloca en una caja. "Al indicarle al ordenador las funciones de pertenencia que representan la cinta y las naranjas respectivamente, es unos casos conseguiremos que la máquina coja el 95% de las naranjas, con otros el 97% y con otros el 99%".
Tal y como explica, a modo de conclusión de su tesis, "si utilizas un algoritmo de intervalos, siempre es mejor. Si tú conoces exactamente cuáles son las mejores funciones de pertenencia, puedes utilizar el algoritmo clásico y obtener un buen resultado. Sin embargo, si no sabes cuáles son, es mejor utilizar un algoritmo de intervalos porque, aunque te equivoques en las funciones, como calculamos automáticamente esos intervalos y ese desconocimiento, obtenemos una solución buena. No significa que sea la mejor solución, pero sí una muy buena solución para un amplio número de casos".
Descubriendo la esencia de las caras
Las máquinas todavía no han podido superar la capacidad de los hombres para reconocer las caras, pero se están acercando. En los últimos meses ha coincidido la presentación de diversos sistemas de reconocimiento facial, como el propuesto por dos psicólogos británicos que aseguran poder crear imágenes con “la esencia visual de las caras”, o el desarrollado por científicos españoles para distinguir expresiones como la tristeza y la alegría.
La técnica ideada por los investigadores Rob Jenkins y Mike Burton, de la Universidad de Glasgow (Reino Unido), permite identificar las caras sin margen de error. El método consiste en crear una sola imagen compuesta a partir de varias fotografías distintas de una misma persona. Los psicólogos han utilizado como base de datos la incluida en la página web de celebridades “My Heritage”, en la que los internautas pueden descubrir a qué famoso se parecen más.
Los dos científicos dispusieron de un conjunto de 500 imágenes: 20 fotos de 25 personajes diferentes, todos varones, como John Travolta y Nicholas Cage (actores que por cierto “cambiaron” sus rostros en la película Cara a Cara). Al introducir en el programa de identificación las fotografías aisladas, el software de la plataforma identificó correctamente al 54%, pero al poner las imágenes compuestas -creadas realizando la media entre todas las disponibles para un mismo famoso-, el programa acertó al 100%.
La técnica de Jenkins y Burton fue diseñada originalmente como un modelo para explicar el aprendizaje facial humano, y el investigador señala que no está claro todavía si el cerebro va aprendiendo a reconocer caras “simplemente haciendo la media o están implicadas operaciones más complejas”. De lo que están seguros es que algún tipo de abstracción de imágenes tiene lugar. La idea central, añade, es que la representación que se hace de un determinado rostro se redefine mejor “cuanto más tiempo se expone ante nosotros, ya que vamos incorporando cada vez más información”.
Además de por la experiencia, el reconocimiento de las caras también está determinado por los genes, según indican estudios como el presentado recientemente por científicos de la Universidad de Michigan (EEUU) en la revista The Journal of Neuroscience. El equipo liderado por el psicólogo Thad Polk, a partir de un trabajo con hermanos gemelos, ha demostrado la importancia de la genética en la actividad neuronal y cerebral ante estímulos como ver una cara.
“El dialogo entre psicólogos e ingenieros puede ser fructífero”, dice Jenkins, y el análisis de algunas alteraciones de la salud relacionadas con el reconocimiento facial parecen darle la razón. Es el caso de la prosopagnosia, un raro trastorno que impide a los que lo padecen reconocer los rostros, aunque los vean. Descubrir los mecanismos implicados en esta alteración puede ayudar a resolver algunos de los retos a los que hoy se enfrentan los sistemas de inteligencia artificial, y por eso centros de investigación como el Instituto Tecnológico de Massachusetts (EEUU) han iniciado estudios al respecto.
En cualquier caso, los campos de batalla actuales de los modelos de reconocimiento facial son las variables ópticas de las imágenes y sus distintas resoluciones. “Estos programas suelen requerir de una gran colección de imágenes por persona, que además son tomadas con distintos ángulos, calidades e iluminaciones, y a menudo resultan caros”, dice Hung-Son Le, un estudiante de doctorado de la universidad sueca de Umea que acaba de presentar una tesis doctoral en la que plantea un nuevo método “que acaba con los problemas tradicionales de los sistemas de reconocimiento facial”.
Los algoritmos o cálculos matemáticos desarrollados por Le permiten reconocer una cara con sólo una fotografía, mejorando el contraste de aquellas imágenes que están sobreexpuestas o con subexposición. Esto permite visualizar mejor algunos detalles que, de otro modo, resultarían difíciles de identificar. El modelo no requiere readaptarse para “conocer” nuevas imágenes, ni se ve afectado por las distintas expresiones de los sujetos. Según su creador esta técnica ha demostrado “superar a los competidores líder” al ponerlo a prueba en bases de datos internacionales como FERET (Facial Recognition Technology) o la de la Universidad de Yale (EEUU).
Los investigadores utilizan estas bases de datos para contrastar sus resultados, y la elección de una u otra depende del análisis que se vaya a realizar. Si FERET incluye 14.126 imágenes de 1.199 individuos tomadas en días e incluso en años diferentes, Yale dispone, por una parte, de 165 imágenes de 15 personas con distintas expresiones y condiciones de luz, y por otra, de 5.760 imágenes de 10 sujetos en 9 poses distintas con 64 condiciones de iluminación diferentes. En el caso del estudio de Le se han utilizado las dos.
Respecto a las posibles aplicaciones comerciales, el estudiante de doctorado ha indicado que los clientes de las agencias de contactos podrían emplearlo para encontrar a una pareja que se parezca a su actriz o actor favorito. Su trabajo ya ha servido para poner en marcha el desarrollo de un dispositivo de reconocimiento facial por internet.
En este campo, la compañía Microsoft acaba de patentar para los teléfonos móviles un sistema parecido denominado Image-based Face Search (reconocimiento facial basado en imágenes). El usuario debe introducir la foto de una persona, tomada por ejemplo con el móvil, y el programa le devuelve los rostros similares encontrados en una base de datos. La aplicación permite además puntuar los rasgos faciales de una determinada imagen y guardar sus preferencias, lo que puede servir a una persona para buscar a su pareja ideal.
Otras de las aplicaciones que ya incorporan algunos móviles y otros dispositivos con cámara -como los ordenadores portátiles-, es un software que permite utilizar los rasgos faciales como forma de autentificarse. El usuario simplemente saca su propia foto y en menos de un segundo un programa informático se encarga de compararla con la que tiene almacenada para, sin necesidad de una clave, darle acceso a la unidad.
En nombre de la seguridad, herramientas de control
El uso de los programas de reconocimiento facial en diversos departamentos de policía es cada vez más frecuente, especialmente en Estados Unidos. Recientemente se ha hecho público que el FBI está invirtiendo millones de dólares en la construcción de la base de datos biométrica más grande del mundo, dentro del proyecto denominado Next Generation Identification (Identificación de Próxima Generación). Su objetivo es facilitar la identificación de multitud de personas en numerosos países mediante las imágenes de la cara, de las palmas de la mano y con las huellas dactilares, (y en contra de algunas voces que denuncian un excesivo control policial).
En el caso de España, los cuerpos de seguridad del Estado todavía no trabajan con técnicas de reconocimiento facial y bases de datos tan desarrolladas como las que ya disponen para las huellas dactilares (SAID) y de balística (SAIB). Carlos Olvera, del Servicio de Criminalística de la Guardia Civil, explica que cuando lo solicita la autoridad judicial lo que sí realizan son estudios antropométricos, para determinar, por ejemplo, si ha habido cambios entre los rostros de una persona sospechosa a lo largo del tiempo. También utilizan el programa informático FACET para elaborar los retratos robot. Con la ayuda de los testigos -que suelen describir el triángulo formado por los ojos, la nariz y la boca-, se diseña el rostro del individuo sospechoso, “y si fuera necesario se añaden otros elementos con el Photoshop, como cicatrices o tatuajes”.
La Policía Nacional también utiliza esos sistemas, aunque Ramón Fernández, jefe de la sección de Antropología de la Comisaría General de Policía Científica, reconoce que todavía no han encontrado ningún programa de reconocimiento facial realmente eficaz. No obstante, dice Fernández, “estamos participando en un grupo de trabajo de la Unión Europea para desarrollar un software fiable de biometría del rostro”, dentro del Foro para la Innovación e Investigación en Seguridad Europea (ESRIF).
Además del tema de seguridad, la identificación facial sirve para funciones tan dispares como confirmar si una persona es mayor de edad y puede comprar tabaco, circunstancia que detectan algunas máquinas expendedoras de Japón, o si es el titular de una tarjeta de crédito para facilitarle dinero en un cajero. En la última feria SIMO de Madrid algunas entidades bancarias presentaron prototipos que, una vez perfeccionados, podría emplearse en el futuro para que los clientes puedan sacar dinero sin necesidad de claves de acceso, simplemente “por la cara”.
La mayoría de estos programas tienen como objetivo reconocer la identidad de una persona, por lo que se centran en buscar las diferencias entre los distintos rostros. Otros sistemas, por el contrario, tratan de identificar los puntos en común de las caras humanas, abstrayéndose de sus particularidades individuales. Por ejemplo, los científicos españoles Luis Baumela y Enrique Muñoz, de la Universidad Politécnica de Madrid, y José Miguel Buenaposada, de la Universidad Rey Juan Carlos, han desarrollado un software que permite reconocer en tiempo real, y con una probabilidad de acierto cercana al 90%, seis expresiones faciales: la sorpresa, el miedo, la alegría, la tristeza, la repugnancia y el enfado. Los bebés entre los tres y doce meses de vida ya manifiestan estas seis emociones en sus rostros, según un estudio publicado recientemente por el Instituto del Bebé Nuk en colaboración con psicólogos de la UNED y las universidades de Murcia y Valencia.
El algoritmo creado por el equipo de Baumela cuantifica los elementos más expresivos de la cara, como los ojos, las cejas o la boca, que se analizan mediante unos recuadros. Las imágenes obtenidas fueron contrastadas con las de la base de datos Cohn-Kanade, integrada por cerca de 500 imágenes con diversas expresiones de 100 estudiantes universitarios. El investigador explica que esta tecnología la podrían emplear empresas que venden productos por internet, para detectar, por ejemplo, los gestos que hace el comprador, así como la industria de los videojuegos y mundos virtuales como Second Life, “para dotar de más realismo a los avatares que representan a los usuarios”.
La aplicación fundamental de este tipo de sistemas, concluye el investigador, es la construcción de lo que se conoce como “interfaces multimodales”. Estos permitirán al ser humano “en un futuro no muy lejano” interactuar con las máquinas de una forma mucho más natural, es decir, “como lo hacemos entre nosotros: mediante la voz y con la información visual que proporcionan los gestos y las expresiones de la cara”.
jueves, 20 de marzo de 2014
martes, 18 de marzo de 2014
Cadena de favores
Era el 11 de diciembre de 1994 y David Gedye celebraba su fiesta de cumpleaños. Por aquel entonces, Gedye estaba trabajando en el desarrollo de un juego on-line para niños llamado Castle Infinity en la compañía Starwave. Mientras charlaba con su colega y compañero de trabajo Craig Kasnov, recordando el 25 aniversario del Apolo XI, pronunció la frase mágica: «si se pudiese hacer ciencia de verdad en los ordenadores de la gente…».
Aquella idea duró más allá de la resaca de la fiesta y se la comentó inmediatamente a Woody Sullivan y Dan Werthimer, quienes habían estado trabajando en el proyecto SETI durante varios años. «La idea de que SETIpudiese ser capaz de utilizar muchos más ciclos de computación fue lo que me animó a comentarles la idea a Woody Sullivan y a Dan Werthimer», comenta Gedye.
Aquella idea duró más allá de la resaca de la fiesta y se la comentó inmediatamente a Woody Sullivan y Dan Werthimer, quienes habían estado trabajando en el proyecto SETI durante varios años. «La idea de que SETIpudiese ser capaz de utilizar muchos más ciclos de computación fue lo que me animó a comentarles la idea a Woody Sullivan y a Dan Werthimer», comenta Gedye.
sábado, 22 de febrero de 2014
AIML
AIML (Artificial Intelilgence Mark-up Language) es un lenguage de programación que está basado en XML. Se diseñó para ayudar en la creación del primer chatbot online, A.L.I.C.E. Básicamente se trata de un robot con el que se puede chatear de una forma fluida. AIML está indicado en la creación de todo tipo agentes software con lenguage natural.
Fue desarrollado por el Dr. Richard Wallace junto con colaboradores de la comunidad opensource entre los años 1995 y 2000. Ha ganado varios premios como el Loebner Prize Contest o The Most Human. En estos concursos, un juez chatea en dos pantallas: en una contesta un humano, mientras que en la otra un chatbot. El objetivo es que el juez sea incapaz de diferenciar cual es cual. Esto indicaría que el chatbot es tan inteligente como el humano, y que ha pasado el famoso test de Turing. Lo cierto es que todavía no se ha conseguido, y se calcula que se conseguirá en el año 2039.
AIML contiene muchos elementos en su programación. Los más importantes son los siguientes:
Categories (categorías): son las unidades fundamentales de conocimiento. Una categoría consiste en al menos dos elementos más, que son los componentes pattern y template, que normalmente se programan en ese orden.
Patterns (patrones): cuando se chatea con el bot, este buscará patrones y responderá según como se le haya programado.
Templates (plantillas): si un patrón coincide con una categoría, y si es ése el patrón que más concuerda, entonces a la respuesta se añade una plantilla específica de la categoría. Esta plantilla puede contener otros componentes de AIML, que permiten personalizar dicha respuesta.
Se ofrecen muchos sets AIML con licencia GPL. Al fin y al cabo, un set AIML es la inteligencia del chatbot al completo ¿Por qué comenzar a programar desde cero, si alguien ya lo ha hecho? Mejorémoslos y compartámos. Podéis encontrar sets en A.L.I.C.E.
Por otro lado, tan importante como el cerebro del chatbot.. es el entorno en el que lo ejecutaremos, más conocido como el interprete. Existen multitud de intérpretes: programados en PHP, Java, Perl, Ruby, Python, C++, .. Conócelos también en A.L.I.C.E.
En nuestro laboratorio de AIML y voiceXML experimentaremos e intentaremos dotar de inteligencia a un chatbot. Como intérprete hemos elegido para empezar el Program O. Tendremos que ir pensando un nombre para el bot..
Suscribirse a:
Entradas (Atom)





















