Optimización matemática

[miniatura|Gráfico dun [paraboloide dado por f(x,y) = -(x²+y²)+4. O máximo global en (0,&nbsp;0,&nbsp;4) está indicado por un punto vermello.]]
En matemáticas, estatística, ciencias empíricas, ciencia da computación, ou economía, a **programación** ou **optimización matemática** é a selección do mellor elemento (con respecto a algún criterio) dun conxunto de elementos dispoñibles.

No caso máis simple, un problema de optimización consiste en maximizar ou minimizar unha función real escollendo sistematicamente valores de entrada (tomados dun conxunto permitido) e computando o valor da función. A xeneralización da teoría da optimización e das técnicas para outras formulacións comprende unha grande área da matemática aplicada. De forma xeral, a optimización inclúe o descubrimento dos "mellores valores" dalgunha función obxectivo dado un dominio definido, incluíndo unha variedade de diferentes tipos de funcións obxectivo e diferentes tipos de dominios.

## Problemas de optimización 
Un problema de optimización pode representarse da seguinte forma
: *Dada*: unha función *f* : *A* \to **R**.
: *Buscar*: un elemento *x*0 na tal que *f*(*x*0) ≤ *f*(*x*) para todo *x* en *A* ("minimización") ou tal que *f*(*x*0) ≥ *f*(*x*) para todo *x* en *A* ("maximización").

Esta formulación chámase problema de optimización ou problema de programación matemática (un termo non directamente relacionado coa programación de computadoras pero aínda en uso, por exemplo na programación linear). Moitos problemas teóricos e do mundo real poden ser modelados mediante este esquema xeral. Problemas formulados usando esta técnica nos campos da física e visión por computadora refírense á técnica como minimización da enerxía, falando do valor da función *f* representando a enerxía do sistema que está a ser modelado.

Tipicamente, *A* é algún subconxunto do espazo euclidiano **R***n*, con frecuencia delimitado por un conxunto de restricións, igualdades ou desigualdades que os elementos de *A* teñen que satisfacer. O dominio *A* de *f* chámase espazo de procura ou o conxunto de elección, mentres que os elementos de *A* se chaman solucións factibles.

A función *f* chámase función obxectivo, función de custo (minimización), función de utilidade (maximización), función de utilidade indirecta (minimización), ou, en certos campos, función de enerxía ou enerxía funcional. Unha solución factible que minimice (ou maximice) a función obxectivo, chámase *solución óptima*.

Por convenio, o formato estándar dun problema de optimización realízase en termos de minimización. Xeralmente, a menos que ambas, a función obxectivo e a rexión factible sexan convexas nun problema de minimización, pode haber varios mínimos locais, onde un mínimo local x* se define como un punto para o que existe algún δ &#x3E; 0, onde para todo x tal que
:\|\mathbf{x}-\mathbf{x}^*\|\leq\delta\,
a expresión
:f(\mathbf{x}^*)\leq f(\mathbf{x})
é verdadeira; é dicir, nalgunha rexión ao redor de x*  todos os valores da función son maiores ou iguais que o valor nese punto. O máximo local defínese de modo similar.

Un gran número de algoritmos propostos para resolver problemas non convexos, incluíndo a maioría dos solucionadores dispoñibles comercialmente, non son capaces de facer unha distinción entre solucións óptimas locais e solucións óptimas rigorosas, e tratan as primeiras como solucións actuais do problema orixinal. A rama das matemática aplicada e a análise numérica que trata do desenvolvemento de algoritmos deterministas que son capaces de garantir converxencia en tempo finito á solución óptima real dun problema non convexo chámase optimización global.

## Notación 
Os problemas de optimización exprésanse a miúdo cunha notación especial. A continuación móstranse algúns exemplos.

### Mínimo e máximo valor dunha función 
Considérese a seguinte notación:
:\min_{x\in\mathbb R}\; (x^2 + 1)

Esta denota o valor mínimo da función obxectivo x^2 + 1, cando *x* se selecciona do conxunto de números reais \mathbb R. O valor mínimo neste caso é 1 e ocorre para x = 0.

De modo similar, a notación
:\max_{x\in\mathbb R}\; 2x
expresa o valor máximo da función obxectivo 2*x*, sendo *x* calquera número real. Neste caso, non existe tal máximo, logo non hai un valor óptimo limitado.

### Argumentos da entrada óptima 
Considérese a seguinte expresión:
{{ecuación|
\underset{x\in(-\infty,-1]}{\operatorname{arg\,min}} \; x^2 + 1,
||left}}
ou de maneira equivalente
{{ecuación|
\underset{x}{\operatorname{arg\,min}} \; x^2 + 1, \; \text{suxeito a:} \; x\in(-\infty,-1].
||left}}

Esta representa o valor (ou valores) do argumento de *x* no intervalo (-\infty,-1] que minimiza (ou minimizan) a función obxectivo *x*2&nbsp;+&nbsp;1 (e non o valor mínimo que alcanza a función obxectivo para devanditos valores). Neste caso, a resposta é *x* = -1, posto que *x* = 0 non é factible, é dicir non pertence ao dominio do problema.

De modo similar,
:\underset{x\in[-5,5], \; y\in\mathbb R}{\operatorname{arg\,max}} \; x\cos(y),
que é equivalente a
:\underset{x, \; y}{\operatorname{arg\,max}} \; x\cos(y), \; \text{sujeto a:} \; x\in[-5,5], \; y\in\mathbb R,
representa o par (x,y) (ou pares) que maximiza (ou maximizan) o valor da función obxectivo x\cos(y), coa restrición engadida de que *x* se atopa no intervalo [-5,5] (novamente, o valor máximo da función non importa). Neste caso, as solucións son os pares da forma (5, 2*k*π) e (−5,(2*k*+1)π), onde *k* percorre todos os enteiros.

## Historia 
Pierre de Fermat e Joseph Louis Lagrange atoparon fórmulas baseadas no cálculo para identificar valores óptimos, mentres que Isaac Newton e Carl Friedrich Gauss propuxeron métodos iterativos para aproximar o óptimo. Historicamente, o termo programación linear para referirse a certos problemas de optimización débese a George B. Dantzig, aínda que gran parte da teoría fora introducida por Leonid Kantorovich en 1939. Dantzig publicou o algoritmo do símplex en 1947 e John von Neumann desenvolveu a teoría da dualidade no mesmo ano.

## Subcampos principais 
* *Programación convexa* estuda o caso en que a función obxectivo é convexa (minimización) ou cóncava (maximización) e o conxunto de restricións é convexo. Este pode ser visto como un caso particular da programación non linear ou como a xeneralización da programación linear ou da convexa cuadrática.
** *Programación linear* (PL): é un tipo de programación convexa, no que a función obxectivo *f* é linear e o conxunto de restricións especifícase usando soamente ecuacións e inecuacións lineares. Devandito conxunto é chamado poliedro ou politopo se está limitado.
** *Programación cónica*: é unha forma xeral da programación convexa. PL, PCSO e PSD poden todos ser vistos como programas cónicos co tipo de cono apropiado.
** *Programación de cono de segunda orde* (PCSO): é un tipo de programación convexa e inclúe certos tipos de problemas de programación cuadrática.
** *Programación semidefinida* (PSD): é un subcampo da optimización convexa onde as variables fundamentais son matrices semidefinidas. É unha xeneralización da programación linear e a programación cuadrática convexa.
** *Programación xeométrica*: é unha técnica por medio da cal o obxectivo e as restricións de desigualdade expresados como polinomios e as restricións de igualdade como monomios, poden ser transformados nun programa convexo.
** *Programación con enteiros* ou *programación enteira*: estuda programas lineares nos cales algunhas ou todas as variables están obrigadas a tomar valores enteiros. Esta non é convexa e en xeral é moito máis complexa que a programación linear regular.
* *Programación cuadrática*: permite á función obxectivo ter termos cadráticos, mentres que o conxunto factible pode ser especificado con ecuacións e inecuacións lineares. Para formas específicas do termo cuadrático, este é un tipo de programación convexa.
* *Programación fraccionaria*: estuda a optimización de  razóns de dúas funcións non lineares. A clase especial de programas fraccionarios cóncavos pode ser transformada a un problema de optimización convexa.
* *Programación non linear*: estuda o caso xeral no que a función obxectivo, ou as restricións, ou ambas, conteñen partes non lineares. Este pode ou non, ser un programa convexo. En xeral, se o programa é convexo afecta á dificultade de resolución.
* *Programación estocástica* ou *optimización estocástica*: estuda o caso no que algunha das restricións ou parámetros depende de variables aleatorias.
* *Programación robusta*: como a programación estocástica, é un intento por capturar a incerteza nos datos fundamentais do problema de optimización. Isto faise mediante o uso de variables aleatorias, pero en cambio, o problema é resolto tendo en conta imprecisións nos datos de entrada.
* *Optimización combinatoria*: preocúpase dos problemas onde o conxunto de solucións factibles é discreto ou pode ser reducido a un.
* *Optimización dimensional-infinita*: estuda o caso onde o conxunto de solucións factibles é un subconjunto dun espazo de dimensión infinita, por exemplo un espazo de funcións.
* *Heurísticas* e *metaheurísticas*: fan suposicións sobre o problema que está a ser optimizado. Usualmente, as heurísticas non garanten que se atope calquera solución óptima. Por iso as heurísticas son empregadas para atopar solucións aproximadas para moitos problemas de optimización complicados.
* *Satisfacción de restrición*: estuda o caso no cal a función obxectivo f é constante (esta se emprega en intelixencia artificial, particularmente en razoamento automatizado).
* *Programación disxuntiva*: úsase cando polo menos unha restrición pode ser satisfeita pero non todas. Esta é de uso particular na programación nun número de subcampos. As técnicas son deseñadas principalmente para a optimización en contextos dinámicos (é dicir, toma de decisións co transcurso do tempo).
* *Cálculo de variacións*: busca optimizar un obxectivo definido sobre moitos puntos co tempo, considerando como a función obxectivo cambia se o cambio é pequeno no camiño de escolla. A teoría do control óptimo é unha xeneralización deste.
* *Programación dinámica* estuda o caso no que a estratexia de optimización baséase na división do problema en subproblemas máis pequenos. A ecuación que describe a relación entre estes subproblemas chámase ecuación de Bellman.
* *Programación matemática con restricións de equilibrio* é onde as restricións inclúen desigualdades variables ou complementarias.

## Clasificación de puntos críticos e extremos 
### Factibilidade do problema 
A solubilidade do problema, tamén chamada factibilidade do problema, é a cuestión de se existe algunha solución factible, á marxe do seu valor obxectivo. Este pode considerarse como o caso especial da optimización matemática onde o valor obxectivo é o mesmo para toda solución, e así calquera solución é óptima.

Moitos algoritmos de optimización necesitan comezar a partir dun punto factible. Unha vía para obter tal punto é relaxar as condicións de factibilidade empregando unha variable de folgura; con suficiente folgura, calquera punto de partida é factible. Entón, minimízase esa variable de folgura ata que a folgura sexa nula ou negativa.

### Existencia 
O teorema de Weierstrass afirma que unha función real e continua nun conxunto compacto alcanza o seu valor máximo e mínimo. De forma máis xeral, unha función semicontinua inferior nun conxunto compacto alcanza o seu mínimo e unha función semicontinua superior nun conxunto compacto alcanza o seu máximo.

### Condicións necesarias de optimalidade 
Un dos teoremas de Fermat asegura que os óptimos dos problemas sen restricións se atopan nos puntos estacionarios, onde a primeira derivada da función obxectivo é cero (ou o seu gradiente nulo). De forma máis xeral, tamén poden atoparse nos puntos críticos onde a primeira derivada ou o gradiente da función obxectivo non está definido, ou na fronteira do conxunto de escolla. Unha ecuación (ou conxunto de ecuacións) indicando que a(s) primeira(s) derivada(s) é(son) igual(iguais) a cero nun óptimo interior chámase unha condición de primeira orde ou un conxunto de condicións de primeira orde.

Os óptimos dos problemas con restricións de desigualdade atópanse en cambio mediante o método dos multiplicadores de Lagrange. Este método computa un sistema de desigualdades chamado condicións de Karush–Kuhn–Tucker ou condicións de folguras complementarias, que se empregan para calcular o óptimo.

### Condicións suficientes de optimalidade 
Mentres a proba da primeira derivada identifica os puntos que poden ser extremos, esta proba non distingue se un punto é mínimo, máximo ou ningún dos dous. Cando a función obxectivo é dúas veces diferenciable, estes casos poden distinguirse estudando a segunda derivada ou a matriz das segundas derivadas (chamada matriz hessiana), en problemas sen restricións, ou a matriz das segundas derivadas da función obxectivo e das restricións chamada a matriz hessiana orlada, en problemas con restricións.

As condicións que distinguen os máximos ou mínimos doutros puntos estacionarios chámanse condicións de segunda orde. Se un candidato a solución satisfai as condicións de primeira orde e as condicións de segunda orde tamén, é suficiente para establecer, polo menos, optimalidade local.

### Sensibilidade e continuidade do óptimo 
O teorema da envoltura describe como o valor dunha solución óptima cambia cando un parámetro subxacente cambia. O proceso que computa este cambio chámase estática comparativa.

O teorema do máximo de Claude Berge (1963) describe a continuidade dunha solución óptima como unha función de parámetros subxacentes.

### Cálculos de optimización 
Para os problemas sen restricións con funcións dúas veces diferenciables, algúns puntos críticos poden ser atopados detectando os puntos onde o gradiente da función obxectivo é cero (é dicir, os puntos estacionarios). De forma máis xeral, un subgradiente cero certifica que un mínimo local foi atopado para os problemas de minimización con funcións convexas ou outras funcións de Lipschitz.

Ademais, os puntos críticos poden ser clasificados usando a definitude da matriz hessiana: se é *definida positiva* nun punto crítico, entón o punto é un mínimo local; se é *definida negativa*, entón o punto é un máximo local; finalmente, se é *indefinida*, entón o punto é algún tipo de punto de sela.

Os problemas con restricións poden con frecuencia ser transformados en problemas sen elas con axuda dos multiplicadores de Lagrange. A relaxación lagrangiana pode tamén prover solucións aproximadas a problemas difíciles con restricións.

Cando a función obxectivo é convexa, entón calquera mínimo local será tamén un mínimo global. Existen técnicas numéricas eficientes para minimizar funcións convexas, como os métodos de punto interior.

## Técnicas de optimización computacional 
Para resolver problemas, os investigadores poden usar algoritmos que terminen nun número finito de pasos, ou métodos iterativos que converxen a unha solución (nalgunha clase específica de problemas), ou heurísticas que poden prover solucións aproximadas a algúns problemas (aínda que as súas iteracións non converxen necesariamente).

### Algoritmos de optimización 
* Algoritmo do símplex  de  George Dantzig, deseñado para a programación linear.
* Extensións do algoritmo do símplex, deseñados para a programación cuadrática e para a programación linear-fraccionaria.
* Variantes do algoritmo do símplex que son especialmente apropiadas para a optimización de redes.
* Algoritmos combinatorios.

### Métodos iterativos 
Os métodos iterativos usados para resolver problemas de programación non linear difiren segundo o que avalíen: hessianas, gradientes, ou soamente valores de función. Mentres que avaliando hessianas (H) e gradientes (G) mellórase a velocidade de converxencia, tales avaliacións aumentan a complexidade computacional (ou custo computacional) de cada iteración. Nalgúns casos, a complexidade computacional pode ser excesivamente alta.

### Métodos heurísticas 
Ademais dos algoritmos (terminación finita) e os métodos iterativos (converxentes), existen métodos heurísticos que poden prover solucións aproximadas a algúns problemas de optimización:
* Evolución diferencial.
* Algoritmo de procura diferencial.
* Relaxación dinámica.
* Algoritmos xenéticos.
* Ascenso de montañas.
* Nelder-Mead: un método popular para aproximar a minimización sen chamadas a gradientes.
* Optimización por enxame de partículas.
* Optimización artificial da colonia de abellas.

## Notas 
## Véxase tamén 
## Bibliografía
*
### Outros artigos 
* Optimización multiobxectivo.
* Eficiencia de Pareto.
### Ligazóns externas 
* COIN-OR—Computational Infrastructure for Operations Research 
* Decision Tree for Optimization Software Ligazóns ao código de optimización 
* Optimización Global  
* Glosario de programación matemática  
* Mathematical Programming Society 
* NEOS Guide e nova  guía no sitio Web 
* Optimization Online  Repositorio de e-prints sobre optimización 
* Optimization Related Links
* Convex Optimization I EE364a: Curso da Unviersidade de Stanford.