Hace 13 años | Por trasmerano a elpais.com
Publicado hace 13 años por trasmerano a elpais.com

Miles de jugadores en red, la mayoría no especializados, han demostrado resolver mejor la forma que adoptan las proteínas que los programas informáticos más avanzados, han hallado científicos de la Universidad de Washington (en Seattle). Averiguar cómo se pliegan las largas cadenas de aminoácidos de las proteínas en la naturaleza -su estructura en tres dimensiones- es uno de los grandes problemas de la biología actual, al que numerosos equipos dedican enormes recursos informáticos.

Comentarios

D

... por ahora.

N

Tiempo al tiempo, la evolución es la evolución... Lo joido es que me cambien por un Intel lol Me molan más los AMD

ctrl_alt_del

Más humanos que los humanos...

M

#16 ,los ordenadores se equivocan, y muchísimo. Prueba a usar un sistema de reconocimiento de voz.

Lo bueno del cerebro humano (o de otros animales) es que podemos procesar información incompleta y confusa, rellenando los huecos y formando modelos que encajen.
No nos quedamos "colgados" en cuanto algo falla. Nos adaptamos a la pobreza del mensaje.
Hoy por hoy, ese es el gran problema de la inteligencia artificial actual, y que está detrás, por ejemplo, de la dificultad de hacer programas informáticos que procesen el lenguaje natural.

No digo que estos problemas no pueda resolverse, pero no siguiendo los modelos clásicos de computación.
Para intentar replicar el cerebro humano se estudian otros modelos, como el que dice en el artículo: el procesamiento distribuido. (Sí, pone "pensamiento", pero es "procesamiento")

Y, siendo un poco "off topic": siempre que sale uno de estos temas de Inteligencia Artificial, sale mucha gente diciendo que las máquinas dominarán el mundo cuando puedan procesar información como los humanos. Es un comentario gracioso, pero espero que la gente no lo diga en serio.

Por si acaso: los seres humanos somos algo más que capacidad de procesar información. Tenemos que tener un motivo para hacerlo, un "drive" o impulso interno.
Sin motivación, que es lo que tenemos los seres vivos (y que se regula con las emociones y las sensaciones corporales: el hambre, el sueño, etc), las máquinas no harán nada de nada.
Puedes tener un sistema de procesamiento que manipula trillones de datos, que si no le das a la tecla para que lo haga, la máquina no lo va a hacer.

D

#20 el que falla es el programador, que tiene que hacer un programa con solucion determinista y puede tener datos de entrada con mucho ruido.

De todas formas las operaciones las hace el harware y el hardware al ser algo fisico no esta exento de errores por fallos puntuales, lo que ocurre es que hay tales niveles de proteccion en caches que es extremadamente improbable que se de un error, pero haberlo ailos.

A la irresolubilidad del problema de la parada le veo un problema en su demostracion, y es que el codigo del programa depende del codigo que lo evalua lo cual provoca irremediablemente la paradoja. Es como la paradoja del profesor que quiere suspender a un alumno le propone que si acierta una pregunta le aprobara y si falla le suspendera, y la pregunta que le formula es: vas a aprobar?, el alumno consciente de que querian suspenderlo si contesta si, el profesor le suspende porque ha fallado la pregunta, en cambio si el alumno contesta no, se da la paradoja. Por eso si se espera obtener soluciones deterministas no puedes hacer que la pregunta influya en el resultado final.

takamura

#23 Es más corto de explicar: El problema de la parada es consecuencia de los teoremas de incompletitud de Gödel, que se refieren a lo que no puede hacer un matemático, que obviamente es una persona, luego una persona tampoco puede resolver el problema de la parada, ya que esto invalidaría los teoremas de incompletitud de Gödel.

#24 Tu último párrafo no lo entiendo. ¿De verdad conoces la demostración? Esa demostración, o versiones modernas de ella, ha sido revisada por multitud de matemáticos durante el siglo XX. Dudo que tú le encuentres un fallo con un argumento tan vago.

D

#27 Asume el ejemplo de http://es.wikipedia.org/wiki/Problema_de_la_parada pues el codigo termina estaria infinito tiempo evaluando el codigo de diagonal, y el codigo termina podria darse cuenta de que su evaluacion de diagonal no acabara nunca dado que no tiene infinitos datos de entrada. Pues eso es a lo mas que podria llegar una persona, de ser consciente de que hay una paradoja.

takamura

#31 Sigo sin entender qué quieres decir exactamente >_< ¿Cuando dices «el código termina» a qué código te refieres?

D

#32 Asume el ejemplo es.wikipedia.org/wiki/Problema_de_la_parada
En el ejemplo hay se utiliza el supuesto codigo y se le denomina 'termina'

takamura

#34 Vale, te contesto a lo de antes:

#24 A la irresolubilidad del problema de la parada le veo un problema en su demostracion, y es que el codigo del programa depende del codigo que lo evalua lo cual provoca irremediablemente la paradoja.

Eso no es un problema de la demostración. Se llama reducción al absurdo y es una técnica totalmente válida y aplicada desde hace más del 2.000 años.

#31 Asume el ejemplo de es.wikipedia.org/wiki/Problema_de_la_parada pues el codigo termina estaria infinito tiempo evaluando el codigo de diagonal, y el codigo termina podria darse cuenta de que su evaluacion de diagonal no acabara nunca dado que no tiene infinitos datos de entrada. Pues eso es a lo mas que podria llegar una persona, de ser consciente de que hay una paradoja.

No veo qué tiene que ver esto con lo de #24, y lo de "no tiene infinitos datos de entrada" no sé a qué viene, ya que en la demostración no se mencionan nunca datos de entrada infinitos.

D

#39 Te lo explico, en la reduccion al absurdo no influye la pregunta en el desarrollo de la respuesta, puesto que cualquier pregunta que influya en el desarrollo de su respuesta podria llegar a una paradoja. Con lo cual no demuestras nada.

si que se mencionan, al principio 'x', es importante que sean finitos asumiendo que existe un codigo 'Termina' necesitase darse cuenta que la propia consulta se convierte en un bucle infinito. Que son exactamente las mismas condiciones que necesitase un ser humano.

takamura

#41 Te lo explico, en la reduccion al absurdo no influye la pregunta en el desarrollo de la respuesta, puesto que cualquier pregunta que influya en el desarrollo de su respuesta podria llegar a una paradoja. Con lo cual no demuestras nada.

Lo siento, pero una explicación tan vaga no me dice nada.

Volviendo a #24:

A la irresolubilidad del problema de la parada le veo un problema en su demostracion, y es que el codigo del programa depende del codigo que lo evalua lo cual provoca irremediablemente la paradoja.

No veo dónde está el problema. Supones que existe un programa con ciertas características, Termina, y le metes como dato de entrada su propio código. ¿Qué problema hay? También puedes compilar GCC usando GCC, ¿y? También puedes escribir en C un intérprete de C, y hacerlo ejecutar una copia de sí mismo, y sigue sin haber ningún problema.

Las matemáticas tienen un lenguaje bastante preciso, y si no escribes con rigor es imposible probar o refutar nada.

D

#42 Escribo sin tildes pero en perfecto castellano, creo que tienes un problema de comprension lectora.

A la irresolubilidad del problema de la parada le veo un problema en su demostracion, y es que el codigo del programa depende del codigo que lo evalua lo cual provoca irremediablemente la paradoja.
No veo dónde está el problema.

Cualquier pregunta que influya en el desarrollo de su respuesta podria llegar a una paradoja.
Ejemplo:
P: ¿Vas a acertar esta pregunta?
R: No.
Resultado: Paradoja.

takamura

#43 Escribo sin tildes pero en perfecto castellano, creo que tienes un problema de comprension lectora.

O puede que tú no te expliques bien Soy matemático y tu explicación es demasiado vaga como para sacar nada en claro de ella. Sé más preciso.

#44 Existen intérpretes de C escritos en C y funcionan perfectamente. Un ejemplo de uso sería:

int.c = intérprete de C
int = ejecutable de int.c
hello.c = programa en C

1) Ejecutamos int.
2) Le metemos int.c como dato de entrada. Ahora estamos ejecutando int.c dentro de int.c.
3) Le metemos al int-dentro-de-int el dato de entrada hello.c.
4) Vemos por pantalla el resultado de hello.c.

De hecho, incluso existen programas que se reproducen a sí mismos:

http://es.wikipedia.org/wiki/Quine_(programa)

D

#42 ¿Puedes usar el compilador gcc para compilar el codigo fuente del gcc? sí, pero con un codigo gcc previamente compilado por otro compilador u otra version del gcc pero no la misma.

También puedes escribir en C un intérprete de C, y hacerlo ejecutar una copia de sí mismo, y sigue sin haber ningún problema.
Bien, ese es mi razonamiento, si hicieses eso tu interprete llegaria a un bucle infinito, que es donde llegaria el mismo supuesto programa que dijese si un programa termina o no termina y se tratase de usar en la paradoja de la diagonal.

Interprete de C

D

Por que los programadores son humanos. ¡Tongo!

D

Por que por ahora,los ordenadores son incapaces de improvisar.
Esperar al día que sean capaces,entonces habrá que preocuparse...

D

Es como dice #5, las máquinas ejecutan programas, y no hay nada más alla del programa, no son capaces de improvisar ni lo serán nunca porque sería necesario que la propia máquina escribiera sus programas sobre la marcha, parcheando su software sin parar...

#6 más alla de la ironía decir que lo que para ti son improvisaciones para tus máquinas no es más que el resultado lógico de una acción.

D

¡Demos gracias a John Connor!

Dav_Gold

#10 skynet is coming...

D

Los ordenadores nos ganan en procesamiento de datos, pero lo que nunca ha podido conseguir la IA es crear una imaginación artificial, una maquina no puede inventar datos nuevos sin correlación con otros, en base a una lógica ya inventada por el hombre claro.

D

Pues mi Spectrum 16kb de 1985 era bastante más inteligente que algunos compañeros de trabajo...

takamura

#46 Una persona sí puede resolver ese problema. Según la dificultad del algoritmo puede llevarle segundos, horas o meses hacer una traza, necesitando incluso ayuda de papel y boli, pero podrá determinar, sin quedarse "colgado", si el programa acaba o no en un número finito de pasos.

[Citation needed]

No hay ninguna prueba de eso. Escribir trazas es un proceso mecánico, y como tal proceso mecánico se puede implementar en un ordenador, afectándole el problema de la parada. Como digo más arriba, si las personas pudieran resolver el problema de la parada, también podrían saltarse los teoremas de incompletitud de Gödel. Por ejemplo, es trivial escribir un programa que pare si la conjetura de Goldbach es falsa y que no pare si es cierta. Para saber si ese programa para necesitas demostrar o refutar la conjetura de Goldbach, problema que no está resuelto y que algunos matemáticos piensan que es indecidible. Si lo fuera, no podrías saber si el programa acaba. La mayoría de los problemas matemáticos son indecidibles, igual que la mayoría de los casos del problema de la parada.

#47 Si hay algún proceso que puede realizar la mente y no un ordenador, resulta que este último no podrá emular, nunca, a la primera.

¿Cómo sabes que lo hay?

freeCode

#48 Es verdad que esa afirmación es un poco arriesgada, pero la verdad es que no era necesaria :).. Basta con un algoritmo simple, de esos que "se ven a simple vista", pero que reciba uno o varios parámetros: Para hacer la traza, tendrías que hacerla con cada una de las combinaciones, pero una persona no necesita hacer eso, puedes "verlo" sin necesidad de probar todos los valores. En el ordenador sí lo necesitas, y ¿cuánto tiempo de ejecución, o cuántos pasos, es el límite para decir que con esa entrada el programa no termina?.. es complicado (o imposible?) de definir..

En fin, no sé si me explico, pero bueno.. Yo creo que la clave del pensamiento está en el aprendizaje, y para el aprendizaje necesitas el error, y definir mediante un algoritmo lo que es un error es cuanto menos difícil.. en fin, me encantan estos temas pero creo que este no es sitio para discutirlo..

Lo que sí te digo es que me has dado qué pensar.. En este punto de la discusión, aunque me siga empecinando en explicarte mi punto de vista, no descarto estar equivocado Seguiré pensando en ello

PD: Una conclusión es cuando te cansas de pensar

takamura

#49 PD: Una conclusión es cuando te cansas de pensar muy bueno

Te recomiendo este libro, que está dedicado al tema:

http://www.casadellibro.com/libro-la-nueva-mente-del-emperador/584512/2900000588010

(no sé si lo habrán vuelto a editar, pero seguramente se encuentre por la mula o lo puedas comprar en inglés)

Por cierto, ¿serías capaz de "ver a simple vista" la traza de un programa de un millón de líneas? (recuerda que la inmensa mayoría de los programas posibles tienen más de un millón de líneas)

freeCode

#50 Gracias por la recomendación.. ya lo tengo bajado..

Y en respuesta a tu pregunta, claro que sí :P.. En serio, es evidente que no.. Cuando decía lo de ver "a simple vista" una traza, no me refería a un programa "al uso", más bien a un pequeño algoritmo, de esos que se suelen usar como ejemplo, por ejemplo, en la misma asignatura de "teoría de la computabilidad".. que por cierto no había más remedio que verlos a simple vista, porque eran en un lenguaje de símbolos matemáticos, se llamaba "GOTO".

takamura

#30 Ahí no dice nada parecido a:

Bueno, todo aquél que haya estudiado teoría de la computabilidad sabrá que mietras los ordenadores se limiten a ejecutar algoritmos no podrán "pensar" como las personas. Es matemáticamente imposible y tiene múltiples demostraciones.

Un ejemplo muy simple es que no se puede escribir un programa que, dado un algoritmo, sepa decir a ciencia cierta si acaba o no, como no sea ejecutándolo. Sin embargo una persona lo puede saber sin riesgo de "quedarse colgada"

freeCode

#33 Sí que lo dice. Lo primero, un ordenador es una máquina de Turing. Lo segundo, está diciendo que hay un problema, llamado "problema de la parada", que es irresoluble por una máquina de Turing, no se puede programar en ella (fíjate en lo que digo #23: se trata de algo que no se puede programar en un ordenador).

Una persona sí puede resolver ese problema. Según la dificultad del algoritmo puede llevarle segundos, horas o meses hacer una traza, necesitando incluso ayuda de papel y boli, pero podrá determinar, sin quedarse "colgado", si el programa acaba o no en un número finito de pasos. Esto, repito una vez más, no puede hacerlo a ciencia cierta un ordenador. Es posible que se os ocurran maneras de hacerlo, pero siempre con algún ejemplo o conjunto de ejemplos concretos, pero nunca en el caso general: para eso son las matemáticas, y es demostrable matemáticamente que no se puede hacer para el caso general.

Al final, resulta que la mente humana puede hacer algo que no puede hacer un ordenador. Es sólo un ejemplo, pero es condición suficiente para demostrar que "un ordenador, tal y como lo conocemos hoy en día, no puede pensar como una persona".

En fin, paso de esforzarme en explicar esto más a fondo... si lo entendéis, perfecto, si no, pues os lo creéis o no os lo creéis, pero yo me pegué varios meses estudiando esta materia, eso sí, hace ya algunos años, y lo tengo muy clarito.

freeCode

#46 Me contesto a mí mismo para una aclaración más, ya que parece este un tema difícil de asimilar, y después de repasar el comentario no he podido editarlo...

Como conclusión resultó que: Si hay algún proceso que puede realizar la mente y no un ordenador, resulta que este último no podrá emular, nunca, a la primera.

Pero tranquilos, que todavía hay esperanzas. La computación cuántica no equivale, como la clásica, a una máquina de Turing, sino a una máquina de Turing indeterminista, y no posee las mismas limitaciones.. Aunque si con esto tampoco se puede, ya se inventará alguna otra forma de emular una mente humana, y a mí me encantaría vivir para verlo.

D

Dadme un martillo. Yo me enfrentaré al ordenador y ya iremos viendo...

freeCode

Bueno, todo aquél que haya estudiado teoría de la computabilidad sabrá que mietras los ordenadores se limiten a ejecutar algoritmos no podrán "pensar" como las personas. Es matemáticamente imposible y tiene múltiples demostraciones. Un ejemplo muy simple es que no se puede escribir un programa que, dado un algoritmo, sepa decir a ciencia cierta si acaba o no, como no sea ejecutándolo. Sin embargo una persona lo puede saber sin riesgo de "quedarse colgada"

Para que los ordenadores nos superen, hay que inventar otro "tipo de computación", con un ordenador convencional simplemente no se puede, es matemáticamente imposible.

D

#12 Te votaría positivo, pero los usuarios-algorítmicos me han negado (con votos negativos) la posibilidad de una nueva forma de computación.

IndividuoDesconocido

#12 Sí que se puede crear un programa que dado un algoritmo sepa determinar a ciencia cierta si ese algoritmo acaba o no sin necesidad de ejecutarlo, tan solo "leyendo" el algoritmo.

En cambio un ser humano lo más que te puede decir es... "yo creo que..." pero a ciencia cierta... nada de nada. ¿Cuantas veces has estado seguro de algo, lo has comprobado varias veces, has estado super seguro de algo y al intentar ponerlo en marcha... ¡ouch! Falla y te das cuenta de que no habías pensado precisamente en eso que ha hecho que falle. Lo que un ser humano crea, por muy seguro que esté no se puede considerar seguro al 100% En cambio un ordenador SI. Los ordenadores no se equivocan.
_________________________________________________________________________________
Esta es la tercera vez que envio este comentario este puto ordenador no funciona o qué??!!!

D

#17 Muy buena contestación.

IndividuoDesconocido

#17 Touché

prejudice

#17 #16 Leyendo el algoritmo y analizando el código, en algunos casos se puede determinar si el algoritmo termina o no, e incluso cálcular el orden del tiempo que tardará en ejecutarse respecto de una variable, etc
Por ejemplo sería trivial escribir un algoritmo que analice algoritmos de este estilo


for(i=0; i

freeCode

#16, #22.. Os remito al enlace que pone #17 (gracias!, a eso me refería exáctamente

http://es.wikipedia.org/wiki/Problema_de_la_parada

IndividuoDesconocido

#17 He estado mirando la demostración de irresolubilidad del problema y utiliza la paradoja de Russell para crear una contradicción. No digo que haga trampa, pero en realidad lo que se demuestra de esa manera es que es imposible crear un programa GENERAL que sirva para TODOS los algoritmos. Pero al igual que hizo Russell con la teoría de conjuntos. Se podría parchear y crear un programa que aunque no fuera general, sirviera para la gran mayoría de códigos. El parche podría ser algo así como que el programa no podría leerse a si mismo. Un programa que determine si un algoritmo se detiene o no sin pasarse a si mismo como parámetro. En el mundo de la informática hay un montón de estos parches. Por ejemplo, no puedes copiar una carpeta dentro de sí misma. ¿Porqué? Para evitar precisamente esta paradoja No soy informático (ni un genio)... pero ¿los compiladores no tienen debuggers que te avisan si algo está mal o si el programa puede entrar en un bucle antes incluso de ejecutar el código?
____________________________________________________
Me gustan estas noticias porque me hacen pensar y me refiero a pensar de verdad no lo que hacen los ordenadores

takamura

#35 No sé a qué paradoja de Russell te refieres, tiene varias. En todo caso, la clave de la demostración no es ninguna paradoja de Russell sino el argumento diagonal de Cantor.

Por supuesto que hay programas que hacen eso para un pequeño número de programas, pero no puede haber ninguno que lo haga para la mayoría. La inmensa mayoría de los programas no se pueden predecir. Y esto es así precisamente por el argumento diagonal. Lo que hace el argumento diagonal, en cualquier demostración, es demostrar que dos conjuntos son distintos (en este caso, los programas predecibles y todos los programas) porque uno tiene un número de elementos mayor que el otro. Básicamente el argumento diagonal es una prueba de que dos conjuntos tienen distinto cardinal.

takamura

#35 En la versión inglesa está explicado más claramente cómo se usa el argumento diagonal.

http://en.wikipedia.org/wiki/Halting_problem#Sketch_of_proof

takamura

#12 Bueno, todo aquél que haya estudiado teoría de la computabilidad sabrá que mietras los ordenadores se limiten a ejecutar algoritmos no podrán "pensar" como las personas. Es matemáticamente imposible y tiene múltiples demostraciones.

No tiene ninguna demostración, porque nadie ha definido qué significa "pensar como las personas". Pero si conoces alguna, estaré encantado de verla.

Un ejemplo muy simple es que no se puede escribir un programa que, dado un algoritmo, sepa decir a ciencia cierta si acaba o no, como no sea ejecutándolo. Sin embargo una persona lo puede saber sin riesgo de "quedarse colgada"

¿Qué te hace pensar que los hombres pueden?

#13 ¿De dónde sacas que tiene valores infinitos?

http://en.wikipedia.org/wiki/Action_potential

danic

#12 no es exactamente asi, aunque la 'logica' y la experiencia nos permita saber en muchos casos si un programa finalizara, todo eso es 'programable' igualmente y se podria emular

Evidentemente si el metodo consiste solo en emular el algoritmo, si el original no termina caes en bucle, se pueden examinar los bucles de otras formas (viendo por ejemplo las condiciones de salida del bucle, y viendo la tendencia de las mismas) digamos que en gran medida lo mismo que podemos hacer los programadores, cualquier otro proceso 'seguro' que quieras usar para resolver el problema de la finalizacion de un algoritmo, se puede programar ¿que son muchos 'trucos distintos'? pues si, pero se podria programar

Ahora bien, eso son bucles sencillos, que o consumen datos o tienen una condicion de salida clara, ¿que pasa si la condicion de salida no es tan clara? digamos que es una variable que adopta un valor oscilante, no ciclico y dependiente del valor anterior, casi un aleatorio ¿se sale del bucle? ¿eres capaz de 'intuirlo'? en muchos casos no, lo unico que puedes es 'probar valores' , y eso lo hace millones de veces mas rapido un ordenador

¿se puede en todos los casos? matematicamente se sabe que no se puede, por el enlace que ya han puesto, y si tu no puedes demostrarme matematicamente que un programa termina o no, no me voy a creer tu demostracion 'intuitiva'

Ojo, en muchos casos los ordenadores nos van a superar, hace tiempo se consideraba que el ajedrez era un ejemplo claro en el que el humano superaba al ordenador por su "intuicion", hoy en dia a ningun humano se le ocurrira pensar que puede ganar a un ordenador 'potente', en otras areas pasa igual (ejemplo de calculos de estructuras, que si, que alguien con 'experiencia' puede calcular 'a ojo y por intuicion', pero oye, me fio mas de un programa)

D

Es imposible que una maquina digital de valores finitos supere a una maquina analogica de valores infinitos.

D

El dia que una maquina tome conciencia de si misma a la humanidad le quedaran 2 dias, hasta entonces los ordenadores no haran mas que las tareas para las que han sido programados

D

Continuacion

El resultado practico es que la evaluacion del algoritmo de la diagonal es infinita.

D

Cont

El resultado practico es que la evaluacion es infinita. Pero como el conjunto de datos de entrada si es finito el algoritmo evaluador si podria decidir que su evaluacion es infinita.

D

Jodete Mac OS