viernes, 16 de mayo de 2014

Uno de los problemas del milenio, ¿P=NP?


Diego Delgado Martínez

Cuando me asignaron esta entrada de blog el título que se me asignó fue “¿P=NP?”, y primera reacción fue: “No esperarán que responda a esa pregunta”. El problema de P frente a NP es considerado uno de los siete problemas del milenio, y por tanto todavía no se le ha encontrado solución. Aunque se han dado aproximaciones y soluciones, ninguna de ellas se ha considerado válida por la comunidad científica.

Dibujo20090905_p_versus_np_in_the_simpsons_tv_series

 Ilustración 1: El problema P=NP ha aparecido en series como The Simpsons, Futurama o Numb3rs


 ¿Qué significa P=NP? ¿Qué es este problema?

Un algoritmo para resolver un problema es eficiente si su coste, en tiempo, es un polinomio en función del tamaño de los datos de entrada. La clase de problemas para los que existen algoritmos que los resuelven de forma eficiente (en tiempo polinomial) se denomina clase P. Hay problemas para los que una posible solución se puede verificar en tiempo polinomial (hay un algoritmo en P que decide la validez de una solución). Este tipo de problemas se encuentran en la clase NP (problemas resolubles de forma no determinista en tiempo polinómico). El problema P versus NP trata de estudiar si es cierto o no que P=NP, es decir, que todo problema para el que se puede verificar eficientemente su solución es un problema para el que se puede calcular su solución de forma eficiente (en tiempo polinomial de manera determinista).
P contiene a la mayoría de problemas naturales. Por ejemplo suma de números, problemas de programación lineal, conectividad en grafos no dirigidos, etc. Las siglas NP pertenecen a “Nondeterministic Polynomial time”, y se refieren los problemas de decisión que pueden ser resueltos en un tiempo polinomial por un autómata o máquina de Turing no determinista. Un ejemplo de esta clase de complejidad es el problema de decisión basado en el problema del viajante, consistente en encontrar un ciclo hamiltoniano con un coste menor que una constante dada. El problema del viajante también es conocido por sus siglas en inglés TSP (Traveling Salesman Problem).
Este problema plantea cómo un viajante podría empezar y terminar en la misma ciudad, pasando por todas las ciudades que están en su mapa una sola vez, con una cantidad de kilometros totales menor que una constante dada. Es fácil comprobar que este problema tiene un coste n!, es decir, n! caminos distintos que hay que comprobar si son ciclos hamiltonianos y además con coste menor que k. Este problema es NP- completo, que es una de las subclases más “difícil” dentro de los problemas que consideramos NP. Pongamos un ejemplo, imaginemos que este problema con sólo 20 ciudades, las posibles combinaciones de estas ciudades serían más de 2.4 trillones (20!).
El problema del viajante consiste en encontrar el camino mínimo en las circustancias anteriores. Este problema es NP-hard, complejidad mayor que NP-completo.

Para todos los problemas de tipo NP, si se nos diera una posible solución afirmativa, se podría comprobar esta solución en tiempo polinómico. En el ejemplo anterior del TSP, bastaría con comprobar que la solución se compone de n nodos no repetidos y que el último es adyacente al primero. Que P=NP, significa que para cada problema para el que podemos verificar su solución eficientemente (en tiempo polinómico), podemos hallar esta solución también en tiempo polinómico.

Es importante señalar que los problemas NP-completos son equivalentes entre sí. De tal manera que si se encuentra un algoritmo eficiente para uno de ellos, también se obtiene para todos los demás. Actualmente se conocen cientos de problemas NP-completos (y cientos de demostraciones falsas de que estos se encuentran en P).

¿Qué pasaría si P=NP?

Técnicamente, esto podría ser verdad, así que imaginemos que gracias a esto, podremos encontrar solución a problemas muy difíciles, como los NP-completos, rápidamente. Algunos puntos de vista se centran sólo en lo negativo, por ejemplo, si P=NP el encriptado de claves sería inútil, ya que tendríamos algoritmos muy eficientes que lo desencriptarían rápidamente.

Pero todos los problemas que hoy no se pueden resolver, al menos en un tiempo aceptable, serían posibles. Por ejemplo, y rascando la superficie de lo posible, la solución al problema del viajante antes expuesto haría el trasporte mucho más eficiente, las fábricas aumentarían enormemente su productividad y a un coste menor. Las máquinas aprenderían rápidamente, los algoritmos de aprendizaje como el reconocimiento de objetos o el aprendizaje del lenguaje se volverían problemas triviales.

Tras esto decir que la gran mayoría de expertos en teorías de complejidad apoyan que NP es distinto de P y que su demostración es sólo cuestión de tiempo.

Enfoque P ≠ NP

A continuación muestro un par de métodos destacados con los que se ha abordado el tema y han fallado en la demostración.
  • Diagonalización. ¿Podemos construir un lenguaje NP ‘L’ tal que cada algoritmo que funcione en tiempo polinómico falle al computar ‘L’? Este es el enfoque de la diagonalización, el cual se remonta al siglo XIX, donde Georg Cantor demostró que no es posible enumerar los números reales.

    Alan Turing, en su artículo “On Computable Numbers, with an Application to the Entscheidungsproblem”[8] en 1936 demostró mediante diagonalización que el problema de parada (Halting Problem), no es computable por una máquina de Turing.




  • Complejidad de circuitos.

    Para demostrar que P ≠ NP basta con demostrar que algún problema NP-completo no puede ser resuelto por un circuito relativamente pequeño de puertas AND, OR y NOT (es decir, que el número de puertas venga determinado por la entrada en una función polinomial).

    En 1985 Razborov  demostró que para el problema de la cliqué (encontrar un subgrafo de tamaño k donde todos sus vértices son adyacentes entre sí, problema NP-completo) no existe un circuito pequeño si sólo se usan puertas AND y OR. Pero al introducir las puertas NOT en sus técnicas, todo falla.  En los casi 30 años que llevamos desde aquello todavía no se ha encontrado un circuito que reduzca significativamente el número de puertas necesarias.

Lidiando con los problemas NP

Tenemos un problema NP-completo que queremos resolver, si, como creemos, P ≠ NP, este problema no tiene una solución eficiente. Pero el problema sigue estando ahí, y seguimos necesitando resolverlo. Existen métodos para calcular la solución o al menos acercarnos a ella. Los más reseñables son:


  • Fuerza bruta. Los ordenadores de hoy en día no son los mismos que hace 30 años ni mucho menos como las primeras máquinas de Turing. La velocidad de cómputo ha aumentado considerablemente, de modo que, para entradas pequeñas, podemos resolver problemas NP en un tiempo considerable, e incluso con algunos algoritmos inteligentes problemas con una entrada moderadamente grande. Por ejemplo, para el problema del viajante, con el método de planos de corte (Cutting Plane Method) de Gomory, lo podemos resolver en práctica con más de 10.000 ciudades. 

  • Complejidad parametrizada. Downey y Fellows iniciaron un análisis de la complejidad computacional para ciertos problemas de decisión parametrizados. El interés de este estudio reside en aquellos problemas NP-completos pero que tienen complejidad polinomial cuando el parámetro k es fijo. Para algunos problemas como el problema de la cliqué el mejor algoritmo conocido requiere
  • Aproximación. No podemos esperar resolver estos problemas de manera eficiente, pero a veces nos basta con una aproximación que si podemos obtener de manera eficiente. Por ejemplo, para el problema  del viajante, Arora en el 2000 aproximo la solución con un coste de .
  • Heurísticas y complejidad para casos promedio. El estudio de los problemas NP se centra en estudiar su comportamiento ante la peor entrada posible, pero en la realidad no siempre es así. Algunos de estos problemas con entradas realistas se pueden resolver de manera moderadamente fácil por medio de heurísticas.


Ya hemos visto que pasaría si P=NP, pero, si como creemos esto no es así, podemos asumir los problemas NP-c como una herramienta muy útil, sobre todo en criptografía. Asumiendo que P≠NP podemos crear fuertes algoritmos para encriptar claves y documentos.

¿Podrán los ordenadores cuánticos resolver los problemas NP-completos?
En pocas palabras, los expertos lo dudan bastante. Lov Grover encontró un algoritmo cuántico que funciona para todos los problemas NP pero sólo consigue una mejora cuadrática y hay evidencias que de esa aceleración no se puede mejorar. 

Una nueva esperanza
Ketan Mulmuley y Milind Sohomi [9] han abordado el problema desde la perspectiva de la geometría algebraica, mediante la Teoría de la Complejidad Geométrica (GCT). Esta perspectiva parece no tener los problemas que han tenido otros modos de abordar el problema, pero necesita unas matemáticas muy complejas que pueden llevar años o décadas sacar adelante. Esto da una nueva esperanza para resolver el problema. Aun así, Mulmey afirma que este proceso llevará unos 100 años, si es que al final funciona.


Conclusión
Hemos abordado el problema desde diferentes puntos de vista y el porqué es importante demostrar que P≠NP. La gran mayoría de métodos no pueden ser explicados de manera sencilla, necesitan matemáticas bastante complejas, por lo que no he podido incluir tantas como me gustaría ni reducir el tamaño de esta entrada de blog.
Lo que creo que ha quedado claro es que nadie entiende en realidad completamente este problema, y que se ha arañado solo la superficie de lo posible. Este problema parece que va a ser un misterio hasta dentro de muchos años.

Diego Delgado Martínez


Referencias y Bibliografía:


  1. Stephen Cook, “The P versus NP problem”, 2000
  2. Lance Fortnow, “The Status of the P versus NP Problem”, Northwestern University, 2009
  3. Francisco R.Villatorio, “El estado actual del problema P distinto de P”,2009
  4. Pablo Burzyn, “Complejidad Computacional en problemas de modificación de aristas en grafos”
  5. Artículo “What will happen when  P≠NP Is Proved?”
  6. “Polynomial time Aproximation scheme for Euclidean Traveling Salesman”
  7. Problema del viajante.
  8. Alan Turing, “On Computable Numbers, With An Application to the Entscheidungsproblem”, 1936.
  9. Ketan D.Mulmuley, “The GCT program towards the P vs. NP problem”, 2012

1 comentario:

  1. Invitación a verificar posible solución analógica de SSP https://pnpanalogo.wordpress.com/2016/01/14/22/

    ResponderEliminar