Algoritmia, heurísticas y optimización computacional

En el corazón de nuestra civilización digital late un motor invisible que solemos dar por sentado. Lo que en el siglo IX nació como una serie de reglas rígidas para el cálculo algebraico —el legado de Al-Juarismi— ha evolucionado hasta convertirse en el concepto moderno de algoritmo: una sofisticada «receta» diseñada para manipular información mediante operaciones elementales. En la actualidad, los algoritmos no son solo curiosidades matemáticas, sino la infraestructura lógica que decide desde la ruta de un camión de reparto hasta la resistencia de un viaducto de hormigón. Sin embargo, ¿comprendemos realmente las leyes que rigen su eficiencia o somos ciegos ante las reglas que separan lo posible de lo imposible?

El concepto de algoritmo ha evolucionado desde una acepción antigua, centrada en reglas para operaciones algebraicas, hacia una visión moderna: un conjunto prescrito de reglas o instrucciones bien definidas para resolver un problema específico en un número finito de pasos. En esencia, se trata de un método para manipular información mediante operaciones elementales.

A continuación, desvelamos cinco realidades esenciales para navegar por este universo de precisión y complejidad.

1. Los pilares del rigor: más allá del simple «paso a paso».

A menudo se define el algoritmo como una lista de instrucciones, pero para la ciencia de la computación esta definición es insuficiente. Un algoritmo debe ser un baluarte contra la ambigüedad, ese «fantasma en la máquina» que detiene en seco cualquier proceso lógico. Un método solo alcanza la categoría de algoritmo si cumple cuatro condiciones necesarias, pero no suficientes.

  • Precisión: cada instrucción debe indicar exactamente qué acción realizar, sin margen de interpretación.
  • Finitud: el proceso debe tener un final garantizado tras un número determinado de pasos.
  • Efectividad: cada operación debe poder ser ejecutada por el ejecutor (humano o máquina) en un tiempo finito.
  • Entrada y salida: debe existir un punto de partida de datos y un resultado concreto.

La finitud no es solo una exigencia teórica, sino también una restricción física. En un mundo de recursos limitados, un proceso que no termina nunca no es una solución, sino un abismo de consumo de energía.

2. El enigma de P vs. NP

Existe una frontera que divide los problemas en dos grandes categorías. Por un lado, la clase P, que agrupa los problemas que podemos resolver rápidamente (de forma eficiente). Por otro lado, está la clase NP, que incluye problemas cuya solución, aunque difícil de encontrar, puede verificarse con rapidez una vez que la tenemos. La gran pregunta que obsesiona a los genios desde 1971 es si resolver es intrínsecamente más difícil que verificar.

«¡Hoy en día no se ha podido demostrar que P = NP!»

Científicamente, sabemos que P ⊂ NP, pero el gran misterio radica en el «empate». Si se demostrara que P = NP, significaría que para la mayoría de los retos complejos de nuestra era —desde la criptografía hasta el diseño estructural— existen algoritmos de una eficiencia asombrosa que aún no hemos logrado ver.

3. La tiranía del tiempo: el análisis del «peor caso».

En ingeniería y computación, el rendimiento no es cuestión de suerte. Para medirlo, recurrimos a la teoría del análisis asintótico de funciones, que nos permite predecir cómo crecerá el esfuerzo de cálculo a medida que aumenta la dimensión del problema (n). Para un especialista, no basta con saber cuánto tarda un algoritmo de media; lo vital es el análisis del peor caso. Este define el coste máximo de aplicar el algoritmo a cualquier problema de tamaño n.

Aquí es donde la matemática se vuelve tangible. Imagine que n representa el número de ciudades que un camión debe visitar.

  • Complejidad polinómica (O(n^k)): El tiempo crece de forma controlada. Estos problemas se consideran «resolubles eficientemente».
  • Complejidad exponencial: El tiempo de cálculo aumenta de forma exponencial. Un ligero aumento en el número de ciudades puede hacer que el ordenador necesite más tiempo que la edad del universo para hallar la respuesta.
Orden de magnitud de un algoritmo

4. El drama de los problemas NP-completos.

Dentro del vasto territorio de la clase NP, existe una «aristocracia» del caos: los problemas NP-completos (NPC). El ejemplo más célebre es el problema del viajante (O(n² 2^n)). Estos problemas son fascinantes porque están interconectados: si alguien lograra encontrar un algoritmo polinómico para resolver un problema NPC, automáticamente todos los problemas NP pasarían a ser resolubles de manera eficiente.

Mientras ese día no llegue, los problemas NPC representan el muro contra el que choca la potencia bruta. En ellos, añadir un solo dato más a la entrada no solo implica trabajo, sino que multiplica la dificultad hasta el punto de que la realidad física se vuelve incapaz de soportar el cálculo.

5. El arte de la heurística: la sabiduría de lo «suficientemente bueno».

¿Qué debe hacer un ingeniero ante un problema cuya solución perfecta tardaría milenios en aparecer? La respuesta está en las heurísticas y las metaheurísticas. Se trata de algoritmos aproximados que actúan como un «Plan B» inteligente cuando la perfección se convierte en el enemigo de lo posible.

Sin embargo, el orden de los factores sí altera el producto. Si un problema de optimización se presenta en forma algebraica, es imperativo intentar primero las técnicas clásicas. No tiene sentido utilizar una heurística si los métodos Simplex (para problemas lineales) o de gradiente (para problemas no lineales) pueden proporcionarnos la respuesta exacta. Solo cuando estas herramientas fallan o su lentitud resulta inasumible, recurrimos a la intuición algorítmica.

Conclusión: Hacia una nueva frontera de optimización.

El viaje desde las antiguas reglas de cálculo hasta la optimización de las estructuras de hormigón modernas nos enseña que el límite de la ingeniería no está en la potencia de los procesadores, sino en la elegancia de nuestros métodos. El éxito consiste en saber navegar entre el rigor asintótico y la flexibilidad heurística.

En última instancia, nos enfrentamos a una pregunta que definirá el futuro de nuestra capacidad técnica: ¿residirá el progreso en la búsqueda incansable del algoritmo perfecto que demuestre que P = NP o en perfeccionar nuestra capacidad para utilizar la intuición heurística y construir un mundo «suficientemente bueno» antes de que se agote el tiempo?

En esta conversación podéis escuchar las ideas más interesantes sobre este tema.

El vídeo resume bien los conceptos más importantes de la algoritmia y la complejidad computacional.

Aquí os dejo un resumen de este asunto.

Algorithmic_Complexity_and_Structural_Optimization

Licencia de Creative Commons
Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.

La programación lineal y el método Simplex en el ámbito del hormigón

La programación lineal es un procedimiento o algoritmo matemático mediante el cual se resuelve un problema indeterminado, formulado mediante un sistema de inecuaciones lineales, optimizando la función objetivo, también lineal. Consiste en optimizar (minimizar o maximizar) una función lineal, denominada función objetivo, de modo que las variables de dicha función estén sujetas a una serie de restricciones que expresamos mediante un sistema de inecuaciones lineales.

Os dejo un vídeo tutorial en el que se explica la programación lineal y se desarrollan las ideas básicas del método Simplex.

 

 

 

 

 

Existen páginas web, como PHPSimplex, donde puedes resolver en línea problemas sencillos. También puede resolverse este tipo de problemas con las herramientas de MATLAB, como la Optimization Toolbox.

A continuación, os dejo un vídeo en el que se explica cómo resolver un problema de programación lineal en MS Excel 2007. Es importante que aprendáis a utilizar el Solver. Espero que os guste el vídeo.

También os dejo el siguiente enlace del canal FdeT donde podéis aprender más sobre programación lineal: https://www.youtube.com/playlist?list=PL0_FimzlChzLfAeFbjv0S2nnj8fAi82wB

¿Seríais capaces de resolver los siguientes problemas, donde el objetivo es maximizar el beneficio?:

  1. Una empresa produce hormigón con los ingredientes A y B. Cada kilo de ingrediente A cuesta 60 unidades monetarias y contiene 4 unidades de arena fina, 3 unidades de arena gruesa y 5 unidades de grava. Cada kilo de ingrediente B cuesta 100 unidades monetarias y contiene 3 unidades de arena fina, 6 unidades de arena gruesa y 2 unidades de grava. Cada amasada debe contener, por lo menos, 12 unidades de arena fina, 12 unidades de arena gruesa y 10 unidades de grava. Formule un modelo de programación lineal y resuélvalo gráficamente.
  2. Una empresa especializada en la construcción de estructuras de edificios tiene patentes para tres tipos de forjados: F1, F2 y F3. Los beneficios que consigue por metro cuadrado de forjado construido son de 100, 90 y 120 unidades monetarias, respectivamente. Por razones de almacenamiento y financiación, diariamente sólo se dispone de dos toneladas de acero, 200 m³ de hormigón y 8 m³ de madera para encofrados. Maximizar el beneficio a obtener. Las cantidades de acero, hormigón y madera que se necesitan por m² en cada uno de los forjados son:

Tipo de forjado

Materia prima

Cantidad

F1

Acero

0,2 kg/m2

Hormigón

80 dm3/m2

Madera

0,001 m3/m2

F2

Acero

0,25 kg/m2

Hormigón

37,5 dm3/m2

Madera

0,00125 m3/m2

F3

Acero

0,225 kg/m2

Hormigón

35 dm3/m2

Madera

0,0015 m3/m2