Cuando un niño hace algo por primera vez sin que se lo pidan, sus padres generalmente celebran. Los investigadores de la Universidad del Sur de California (USC) están teniendo ese momento en este momento.
Mostrando entradas con la etiqueta Algoritmo. Mostrar todas las entradas
Mostrando entradas con la etiqueta Algoritmo. Mostrar todas las entradas
domingo, 29 de septiembre de 2019
domingo, 8 de junio de 2014
Entregado a la suerte
Los ordenadores son totalmente racionales, y, en consecuencia, Incapaces de elegir un numero al azar, que es una tarea irracional
El metodo Monte Carlo
Este metodo lo invento John Von Neumann y se vale de los numeros al azar para calcular las respuestas a problemas matematicos. En matematicas, con frecuencia se necesita calcular la superficie delimitada por una curva y esto, en cierto sentido, es analogo a hallar la superficie de una isla cuando solo se dispone de un mapa de las lineas costeras. Se ilustra el mapa de Gran Bretaña en un recuadro de dimensiones conocidas, que sera bombardeado por puntos al azar. Dado que las posiciones de os puntos se generan aleatoriamente, caerán sobre toda la superficie enmarcada en el recuadro, y el número que caiga dentro de la isla será proporcional a la superficie de Gran Bretaña. Utilizando 40 numeros aleatorios hallamos que 24 caen en el mar y 16 en tierra. Por tanto, la superficie de la isla es: 16/40 X (1050x550)= 16/40 X 577500= 231000 Kilometros cuadrados. Si se utilizara un mayor numero de puntos al azar, el resultado se aproximaria mas a la cifra de 229523 km2, la superficie de Gran Bretaña.
"Elija
un numero al azar." Esta es una de las cosas más fáciles para cualquiera;
pero, paradójicamente, esta sencilla tarea es imposible para un ordenador.
Un
numero al azar, o aleatorio, es un numero imposible de predecir en cualquier
circunstancia. Un ordenador no hace más que seguir instrucciones y necesita una
razón para todas las acciones que asume, de modo que cualquier número que cree
será la consecuencia de una serie de instrucciones. Independientemente del
grado de complejidad de estas instrucciones, el número será aun teóricamente predecidle
y por ello el número no es auténticamente aleatorio.
Sin
embargo, se pueden obtener auténticos números aleatorios a partir de procesos físicos.
Por ejemplo, en Gran Bretaña, el ERNIE (Electronics Ramdom Number Indicator
Equipment: Equipo electrónico indicador de números al azar) utiliza el
movimiento al azar de electrones libres para elegir los números ganadores de
los bonos emitidos por las cajas de ahorros y que participan en una especie de lotería
nacional.
Fue
Von Neumann quien concibió la idea de números seudo aleatorios, que se podían
crear matemáticamente. Su método consistía en tomar un numero de cuatro dígitos,
por ejemplo, el 4321, y elevarlo al cuadrado. Del resultado obtenido de ocho dígitos,
18671041, el tomaba los cuatro digitos centrales, 6710, como el numero al azar.
Este se convierte luego en la "semilla" a partir de la cual se creara
el numero siguiente. De manera que 6710 al cuadrado da 45024100, cuyos dígitos
centrales son 0241, que se convierte en el número aleatorio, y así
sucesivamente. Este proceso puede seguir indefinidamente, pero dado que el
total de los diferentes números posibles con cuatro dígitos es limitado (9999),
tarde o temprano la secuencia habrá de empezar a repetirse.
Los
ordenadores modernos utilizan procedimientos más complicados que proporcionan números
seudo aleatorios al instante. Los números Aleatorios se generaron por primera
vez electrónicamente para que los emplearan los ingenieros de telecomunicaciones,
cuando intentaban simular las fluctuaciones de la demanda en las centrales telefónicas.
En la actualidad se emplean para muchos fines, desde la simulación de procesos
que fluctúan al azar en los juegos por ordenadores, hasta la evaluación de difíciles
funciones matemáticas. Para la mayoría de las aplicaciones, los algoritmos para
números aleatorios se pueden considerar genuinamente al azar.

EL ASNO RACIONAL
Imaginemos que colocamos a un asno totalmente racional a medio camino entre dos pilas de heno identicas. El asno no puede escoger la pila mas grande porque ambas son iguales, y no puede escoger la que esté más cerca por que el esta exactamente en medio de las dos. De modo que tal vez el animal se dirigiera a la que hubiera visto primero. Pero ¿por que habria de mirar a una en lugar de a la otra? Puesto que no existe razon alguna que le haga elegir una pila y no la otra, el asno simplemente se quedaría allí, en el medio, y se moriría de hambre. Del mismo modo, los ordenadores no puden generar números auténticamente aleatorios, por que todo lo que hacen lo realizan estrictamente de acuerdo a la razon.
Asno de Buridán
El asno de Buridán es el nombre que se le da al animal que protagoniza un antiguo argumento de reducción al absurdo contra Jean Buridan (1300 - 1358), teólogo escolástico discípulo de Guillermo de Ockham, defensor del libre albedrío y de la posibilidad de ponderar toda decisión a través de la razón. Para satirizar su posición, algunos críticos imaginaron el caso absurdo de un asno que no sabe elegir entre dos montones de heno (o, en otras versiones, entre un montón de avena y un cubo de agua), y que a consecuencia de ello termina muriendo de inanición (o de sed). Se trata, según algunos, de una paradoja, ya que, pudiendo comer, no come porque no sabe, no puede o no quiere elegir qué montón es más conveniente, ya que ambos montones le parecen iguales. Aristóteles, en el De Cælo, ya se había preguntado cómo un perro confrontado ante dos cantidades idénticas de alimento podría comer.
El ejemplo del asno que muere de hambre por indecisión parece inverosímil, pero es posible imaginar casos menos extremos y más intuitivos de la misma paradoja: piénsese en alguien que sigue la máxima de hacer siempre primero lo que es más urgente y, enfrentado ante varias tareas urgentes, su propia deliberación acerca de cuál es la tarea prioritaria le hace perder valiosísimo tiempo. O piénsese en una persona que ama a dos pretendientes ¿puede amarlos a ambos con la misma fuerza y perderlos a ambos por culpa de su indecisión?
Racionalidad y simetría
El problema es un ejemplo del uso del principio de razón suficiente formulado siglos más tarde por Leibniz, según el cual si no hay una razón suficiente para que una cosa suceda en vez de otra, el principio afirma que no sucede nada, la situación inicial no cambia. La paradoja del asno de Buridán aplica el principio anterior a una situación de simetría bilateral. Otro contexto en el que se suele aducir la paradoja es como argumento de reducción al absurdo del racionalismo para justificar la fe religiosa. Como el asno muerto de hambre, debemos supuestamente tomar una decisión no racional para evitar quedar paralizados en una duda sin fin. Un contra-argumento típico responde que es perfectamente racional reconocer que ambas opciones son igualmente buenas y escoger arbitrariamente una en vez de morir de hambre.
Racionalidad y valor
Por otra parte, en un contexto de interpretación ligeramente distinto al anterior, el significado atribuido a la paradoja es que permite reconocer que ya sea que consideremos racional o no a la decisión, la misma estará siempre impregnada de la noción de valor. Pues la situación planteada en la paradoja conduce a la inmovilidad porque propone al asno dos opciones de igual valor. Pero la mayoría de las decisiones humanas se basan en la percepción de una diferencia de valor; más allá de que tal valoración pueda considerarse racional o no.
martes, 29 de abril de 2014
Resuelven misterio biológico que impulsara a la inteligencia artificial
Mediante la simulación informática de 25.000 generaciones de evolución, los ingenieros y expertos en robótica de la Universidad de Cornell han descubierto por qué las redes biológicas tienden a organizarse como módulos – un hallazgo que dará lugar a una mejor comprensión de la complejidad de la evolución.
![]() |
| El descubrimiento ha contestado la pregunta de por qué los sistemas biológicos se organizan de forma modular, y ayudará en la creación de sistemas más complejos de inteligencia artificial. |
Desde los cerebros hasta las redes reguladoras de genes, muchas entidades biológicas se organizan en módulos – cúmulos densos de partes interconectadas en una red compleja. Durante décadas, los biólogos han querido saber por qué los seres humanos, las bacterias y otros organismos evolucionaron en forma modular. Al igual que los ingenieros, la naturaleza construye cosas de forma modular y por la combinación de partes distintas, pero eso no explica el origen evolutivo de la modularidad. Los reconocidos biólogos Richard Dawkins, Günter P. Wagner, y el ya fallecido Stephen Jay Gould identificaron la cuestión de la modularidad como un tema central en el debate sobre “la complejidad de la evolución”.
Durante años, el supuesto predominante ha sido simplemente que la evolución de los módulos se debe a que las entidades modulares pueden responder a los cambios con mayor rapidez, y por lo tanto, tienen una ventaja adaptativa sobre sus competidores no modulares. Pero eso puede no ser suficiente para explicar el origen del fenómeno.
El equipo descubrió que la evolución no produce módulos, porque son diseños más adaptables, sino porque los diseños modulares tienen menos y más cortas conexiones de red. Las construcción de las conexiones de red es costosa, y su mantenimiento también lo es. Al final, resultó que fue suficiente incluir un “costo de cableado” para hacer que la evolución favoreciera a las estructuras modulares.
Para probar esta teoría, los investigadores simularon la evolución de las redes con y sin el coste de las conexiones de red.
Una vez que se agrega un costo de conexiones de red, los módulos aparecen inmediatamente. Cuando no se incluye el costo, los módulos nunca se forman. El efecto es muy dramático, dijo Jeff Clune de la Universidad de Wyoming.
Los resultados pueden ayudar a explicar la presencia casi universal de la modularidad en redes biológicas tan diversas como las redes neuronales – como el cerebro de los animales, en las redes vasculares, en redes de regulación génica, redes de interacción de proteína-proteína, redes metabólicas, e incluso en redes construidas por los humanos, como la Internet.
Los hallazgos se publican en la edición de 30 de enero de Proceedings of the Royal Society.
sábado, 12 de abril de 2014
Python para microcontroladores
Quien esté deseando aprender un lenguaje de alto nivel, encontrará una excelente opción en Python. Y si la idea es aplicarlo en proyectos de hardware, existe el proyecto Micro Python, una versión del lenguaje escrita desde cero, especialmente optimizada para microcontroladores, y que también incluye un módulo de desarrollo oficial.
![]() | |
| microcontroladores |
Si te preguntas para qué se pueden usar microcontroladores, en realidad sería más lógico invertir esa pregunta, y preguntar para qué “no” se pueden usar. A menos que los requerimientos de hardware sean más altos de lo normal, no hay dudas en que un microcontrolador es la plataforma de hardware ideal cuando se necesitan ejecutar tareas específicas. En lo personal, uno de los usos que planeo explorar muy pronto es el de la conversión de señales para establecer una capa de compatibilidad entre viejos teclados mecánicos de terminales y ordenadores modernos, independientemente de marca o sistema operativo. Sin embargo, una cosa es cargar código en un microcontrolador, y otra es escribirlo. Python es un lenguaje muy popular, y ha encontrado un excelente hogar en ordenadores SBC como el Raspberry Pi. Claro que, no siempre es viable montar un Pi en el interior de un teclado, en la puerta de un garaje, o en un robot. Ahí es cuando aparece Micro Python.
De acuerdo a su desarrollador Damien George, Micro Python es un reinicio completo del lenguaje Python, escrito desde cero en ANSI C, con microcontroladores en mente. Posee compilador, sistema runtime, máquina virtual, recolector de basura, parser, y librerías de soporte para su ejecución sobre el STM32F405. Todo el proceso de compilación se lleva a cabo en el chip, por lo que no hay que instalar software adicional en el ordenador. Su uso de memoria fue drásticamente reducido, un detalle que vemos establecido en las especificaciones del módulo oficial de desarrollo. Además de utilizar el chip antes mencionado (con una frecuencia de 168 MHz), el módulo tiene un megabyte de memoria Flash, y 192 KB de RAM., todo en un tamaño de 3,3 por 4 centímetros.
El desarrollador menciona a la robótica como una aplicación ideal para Micro Python, pero lo cierto es que tu imaginación será el límite aquí. Micro Python se convirtió en un proyecto Kickstarter, donde ya obtuvo las quince mil libras esterlinas que necesitaba para pasar a la siguiente fase. ¿Cuánto cuesta cada módulo Micro Python con el lenguaje preinstalado? 24 libras, algo así como 29 euros, más otros cinco en concepto de envío internacional. El precio es similar al de un Raspberry Pi, pero nunca faltan limitaciones de espacio y energía que hacen mucho más conveniente la aplicación de un microcontrolador. Las primeras entregas, en marzo de 2014.
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:
martes, 1 de abril de 2014
Maquinas que perciben el mundo como los humanos
El funcionamiento actual de los robots descansa sobre la estrategia de “percibir primero y actuar después”. Científicos de la Universidad del País Vasco trabajan para cambiar este paradigma, y hacer que la acción no sea consecuencia de la percepción, sino una parte integral del proceso de percepción. Este proyecto, bautizado como eSMCs, mejorará el comportamiento robótico, y ayudará a comprender la naturaleza de la mente.
![]() |
| Xabier Barandiaran, investigador del IAS-Research y profesor en el Departamento de Filosofía de la UPV/EHU. |
El proyecto eSMCs se ha propuesto como objetivo cambiar el paradigma, y generar modelos computacionales más dinámicos, donde la acción no es una mera consecuencia de la percepción, sino una parte integral del proceso de percepción.
Se trata de mejorar el comportamiento de los robots mediante modelos de percepción más cercanos a los humanos. Filósofos de la Universidad del País Vasco (UPV/EHU) trabajan en la mejora de los sistemas de percepción de los robots aplicando modelos humanos.
“El concepto de cómo la ciencia ha entendido la mente, a la hora de construir un robot o mirar el cerebro, es que sacas una foto, luego esa foto se procesa como si la mente fuera un ordenador, y realiza un reconocimiento de patrones. Hay diferentes tipos de algoritmos y de técnicas para identificar un objeto, escenas, etc… Sin embargo, la percepción orgánica, la del ser humano, es mucho más activa. El ojo, por ejemplo, realiza un montón de movimientos sacádicos —movimientos oculares pequeños y rápidos— que nosotros no vemos. Ver es estabilizar y reconocer objetos a través de esa acción visual, saber cómo cambia mi relación y sensación corporal respecto al movimiento”
Explica Xabier Barandiaran, doctor en filosofía e investigador del IAS-Research (UPV/EHU) que bajo la dirección del investigador Ikerbasque Ezequiel di Paolo forma parte del proyecto Europeo eSMCs (Extending Sensorimotor Contingencies to Cognition / Extendiendo las Contingencias Sensomotoras a la Cognición).
Hasta ahora se ha creído que las sensaciones se procesaban y creaban la percepción que luego derivaba en razonamiento y acción. Para Barandiaran, la acción es parte integral de la percepción:
“Nuestra idea fundamental es que cuando percibimos, lo que hay es una exploración activa, una coordinación particular con el entorno, como una especie de danza invisible que hace posible la visión”.
Pensar con el cuerpo y el entorno
Desde el proyecto eSMCs se quiere aplicar esa idea a los modelos computacionales utilizados en robots, mejorar su comportamiento y comprender así la naturaleza de la mente animal y humana.
Para ello, los investigadores trabajan con las contingencias sensomotoras: relaciones regulares existentes entre acciones y cambios en las variaciones sensoriales asociados a dichas acciones. Un ejemplo de este tipo de contingencia es cuando uno bebe agua a la vez que habla, casi sin darse cuenta de haberlo hecho.
La interacción con el entorno se ha dado, “sin necesidad de representar internamente que esto es un vaso, y luego computar necesidades y planificar una acción”, explica Barandiaran, “la visión del vaso llama a la acción, se coordina con la sed, al tiempo que la propia presencia del agua en la mesa me basta para coordinar el ciclo visuomotor que termina con el vaso en mis labios”.
Lo mismo ocurre en los robots del proyecto eSMCs, “están todo el rato en movimiento, no se paran a pensar, piensan en acto, con el cuerpo y el entorno”, añade.
Los investigadores del proyecto eSMCs sostienen que las acciones juegan un papel clave no solo en la percepción, sino también en el desarrollo de capacidades congnitivas más complejas.
Por lo que creen que las contingencias sensomotoras pueden ser utilizadas para definir hábitos, intenciones, tendencias y estructuras mentales, dotando así al robot de un comportamiento más complejo y fluido.
Adaptarse y sentir
Así, en uno de los experimentos llevan a cabo una simulación robótica (desarrollada por Thomas Buhrmann, también integrante de este equipo de la UPV/EHU) en la que un agente tiene que discriminar entre lo que podríamos llamar un grano de acné y una picadura o bulto en la piel.
![]() |
| Arquitectura robótica. |
“El acné tiene punta, y la picadura no. Nuestro agente, igual que las personas, se queda en la punta y reconoce el acné, y cuando pasa por el bulto, lo ignora. Lo que buscamos modelar y explicar es ese momento perceptivo que se construye con la exploración activa de la piel, cuando sientes que ‘ah! he dado con el grano de acné’ y sigues deslizando tu dedo por encima", comenta Barandiaran. El modelo intenta identificar qué tipo de relación se establece entre los ciclos de movimiento y sensación y los patrones neurodinámicos que simulan en el “mini-cerebro” del robot.
En otro robot, construido en el Laboratorio de Inteligencia Artificial de la Universidad de Zurich, Puppy, un perro robótico, es capaz de adaptarse y “sentir” la textura del terreno en el que se mueve (resbaladizo, viscoso, rugoso, etc.) explorando las contingencias sensomotoras que se producen al andar.
El trabajo del equipo de investigación de la UPV/EHU se centra en la parte teórica de los modelos a desarrollar. “Como filósofos lo que hacemos, en gran medida, es definir conceptos. Nuestro mayor objetivo es poder definir conceptos técnicos como el de hábitat sensomotor, o el de patrón de coordinación sensomotora, así como el de hábito o el de la vida mental en su conjunto”.
Definir y dar forma matemática a los conceptos es fundamental para que el científico pueda aplicarlo en experimentos concretos, no solo con robots, sino también con humanos.
Los socios del centro Médico Universitario Hamburgo-Eppendorf, por ejemplo, estudian cómo cambia la percepción del tiempo y del espacio en pacientes con Parkinson, en dialogo con los desarrollos teóricos del equipo de la UPV/EHU.
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
sábado, 22 de marzo de 2014
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
El hombre que confundió a su mujer con un sombrero
Los libros de Oliver Sacks son, por asi decirlo, fascinantes, "El hombre que confundió a su mujer con un sombrero" expone casos que son como de ciencia ficción y es curioso como por medio de las patologías cerebrales o neuronales nos damos cuenta del increíble potencial que tiene nuestro órgano mas complicado y maravilloso: el cerebro.
En el año 1966 Sacks estudio el caso de los gemelos llamados John y Michael los cuales eran muy conocidos por entonces por haber salido en la radio y la televisión, los gemelos que entonces tenían veintiséis años eran considerados por todos los especialistas que los habían estudiado como unos idiot savants, unos autistas con psicosis y grave retardo mental, no tenían nada de especial, salvo una memoria documental extraordinaria, y la facultad de utilizar un algoritmo para saber que día de la semana era un día cualquiera, pasado o futuro.
En el año 1966 Sacks estudio el caso de los gemelos llamados John y Michael los cuales eran muy conocidos por entonces por haber salido en la radio y la televisión, los gemelos que entonces tenían veintiséis años eran considerados por todos los especialistas que los habían estudiado como unos idiot savants, unos autistas con psicosis y grave retardo mental, no tenían nada de especial, salvo una memoria documental extraordinaria, y la facultad de utilizar un algoritmo para saber que día de la semana era un día cualquiera, pasado o futuro.
sábado, 14 de diciembre de 2013
Suscribirse a:
Entradas (Atom)

















