Programação quadrática - Quadratic programming

A programação quadrática ( QP ) é o processo de resolver certos problemas de otimização matemática envolvendo funções quadráticas . Especificamente, busca-se otimizar (minimizar ou maximizar) uma função quadrática multivariada sujeita a restrições lineares nas variáveis. A programação quadrática é um tipo de programação não linear .

"Programação", neste contexto, refere-se a um procedimento formal para resolver problemas matemáticos. Esse uso data da década de 1940 e não está especificamente vinculado à noção mais recente de "programação de computador". Para evitar confusão, alguns profissionais preferem o termo "otimização" - por exemplo, "otimização quadrática".

Formulação de problema

O problema de programação quadrática com n variáveis ​​e m restrições pode ser formulado como segue. Dado:

  • um vetor c n- dimensional com valor real ,
  • uma matriz simétrica real n  ×  n- dimensional Q ,
  • uma matriz real A m  ×  n- dimensional , e
  • um vetor real b dimensional m ,

o objetivo da programação quadrática é encontrar um vetor n- dimensional x , que irá

minimizar
sujeito a

onde x T denota o vetor transposto de x , e a notação A xb significa que cada entrada do vetor A x é menor ou igual à entrada correspondente do vetor b (desigualdade por componente).

Mínimos quadrados

Como um caso especial quando Q é simétrico positivo-definido , a função de custo se reduz a mínimos quadrados:

minimizar
sujeito a

onde Q = R t R decorre da decomposição de Cholesky de Q e C = - R t d . Por outro lado, qualquer programa de mínimos quadrados restritos pode ser enquadrado de forma equivalente como um QP, mesmo para uma matriz R não quadrada genérica .

Generalizações

Ao minimizar uma função f na vizinhança de algum ponto de referência x 0 , Q é definido com sua matriz Hessiana H ( f  ( x 0 )) e c é definido com seu gradiente f  ( x 0 ) . Um problema de programação relacionado, programação quadrática com restrição quadrática , pode ser colocado adicionando restrições quadráticas nas variáveis.

Métodos de solução

Para problemas gerais, uma variedade de métodos são comumente usados, incluindo

No caso em que Q é definido positivo , o problema é um caso especial do campo mais geral de otimização convexa .

Restrições de igualdade

A programação quadrática é particularmente simples quando Q é definido positivo e há apenas restrições de igualdade; especificamente, o processo de solução é linear. Usando multiplicadores de Lagrange e buscando o extremo do Lagrange, pode ser facilmente mostrado que a solução para o problema de igualdade restrita

é dado pelo sistema linear

onde λ é um conjunto de multiplicadores de Lagrange que saem da solução ao lado de x .

O meio mais fácil de abordar este sistema é a solução direta (por exemplo, fatoração LU ), que para pequenos problemas é muito prática. Para grandes problemas, o sistema apresenta algumas dificuldades incomuns, mais notavelmente que o problema nunca é definido positivamente (mesmo se Q for), tornando potencialmente muito difícil encontrar uma boa abordagem numérica, e há muitas abordagens para escolher dependendo do problema.

Se as restrições não acoplam as variáveis ​​com muita força, um ataque relativamente simples é alterar as variáveis ​​para que as restrições sejam incondicionalmente satisfeitas. Por exemplo, suponha que d = 0 (generalizar para um valor diferente de zero é direto). Olhando para as equações de restrição:

introduzir uma nova variável y definida por

onde y tem dimensão de x menos o número de restrições. Então

e se Z for escolhido de forma que EZ = 0, a equação de restrição será sempre satisfeita. Encontrar tais Z implica encontrar o espaço nulo de E , o que é mais ou menos simples, dependendo da estrutura de E . Substituir na forma quadrática dá um problema de minimização irrestrito:

cuja solução é dada por:

Sob certas condições em Q , a matriz reduzida Z T QZ será positiva definida. É possível escrever uma variação do método do gradiente conjugado que evita o cálculo explícito de Z .

Dualidade Lagrangiana

O dual Lagrangiano de um QP também é um QP. Para ver isso, vamos nos concentrar no caso em que c = 0 e Q é definido positivo. Escrevemos a função Lagrangiana como

Definindo a função dupla (Lagrangiana) g (λ) como , encontramos um ínfimo de L , usando uma definição positiva de Q :

Portanto, a função dupla é

e assim o dual Lagrangiano do QP é

Além da teoria da dualidade de Lagrang, existem outros pares de dualidade (por exemplo , Wolfe , etc.).

Complexidade

Para Q definido positivo , o método elipsóide resolve o problema em tempo polinomial (fracamente) . Se, por outro lado, Q for indefinido, então o problema é NP-difícil . Pode haver vários pontos estacionários e mínimos locais para esses problemas não convexos. Na verdade, mesmo que Q tenha apenas um autovalor negativo , o problema é (fortemente) NP-difícil .

Restrições inteiras

Existem algumas situações em que um ou mais elementos do vetor x precisarão assumir valores inteiros . Isso leva à formulação de um problema de programação quadrática inteira mista (MIQP). As aplicações do MIQP incluem recursos hídricos e a construção de fundos de índice .

Solucionadores e linguagens de script (programação)

Nome Informação resumida
AIMMS Um sistema de software para modelagem e resolução de problemas de otimização e agendamento
ALGLIB Biblioteca numérica com licença dupla (GPL / proprietária) (C ++, .NET).
AMPL Uma linguagem de modelagem popular para otimização matemática em grande escala.
APMonitor Suíte de modelagem e otimização para sistemas LP , QP, NLP , MILP , MINLP e DAE em MATLAB e Python.
Artelys Knitro Um pacote integrado para otimização não linear
CGAL Um pacote de geometria computacional de código aberto que inclui um solucionador de programação quadrática.
CPLEX Solver popular com API (C, C ++, Java, .Net, Python, Matlab e R). Gratuito para acadêmicos.
Função Excel Solver Um solucionador não linear ajustado para planilhas nas quais as avaliações das funções são baseadas nas células de recálculo. Versão básica disponível como complemento padrão para Excel.
GAMS Um sistema de modelagem de alto nível para otimização matemática
GNU Octave Uma linguagem de programação gratuita (sua licença é GPLv 3) de propósito geral e orientada a matrizes para computação numérica, semelhante ao MATLAB. A programação quadrática no GNU Octave está disponível através do comando qp
Gurobi Solver com algoritmos paralelos para programas lineares de grande escala, programas quadráticos e programas de número inteiro misto. Gratuito para uso acadêmico.
IMSL Um conjunto de funções matemáticas e estatísticas que os programadores podem incorporar em seus aplicativos de software.
IPOPT IPOPT (Interior Point OPTimizer) é um pacote de software para otimização não linear em grande escala.
Bordo Linguagem de programação de uso geral para matemática. A resolução de um problema quadrático no Maple é realizada por meio de seu comando QPSolve .
MATLAB Uma linguagem de programação de uso geral e orientada a matrizes para computação numérica. A programação quadrática em MATLAB requer a caixa de ferramentas de otimização, além do produto MATLAB base
Mathematica Uma linguagem de programação de propósito geral para matemática, incluindo recursos simbólicos e numéricos.
MOSEK Solucionador para otimização em larga escala com API para diversas linguagens (C ++, Java, .Net, Matlab e Python).
Biblioteca Numérica NAG Uma coleção de rotinas matemáticas e estatísticas desenvolvidas pelo Numerical Algorithms Group para múltiplas linguagens de programação (C, C ++, Fortran, Visual Basic, Java e C #) e pacotes (MATLAB, Excel, R, LabVIEW). O capítulo Otimização da Biblioteca NAG inclui rotinas para problemas de programação quadrática com matrizes de restrição linear esparsas e não esparsas, juntamente com rotinas para a otimização de lineares, não lineares, somas de quadrados de funções lineares ou não lineares com não lineares, limitadas ou sem restrições . A biblioteca NAG tem rotinas para otimização local e global e para problemas contínuos ou inteiros.
Pitão Linguagem de programação de alto nível com ligações para a maioria dos solucionadores disponíveis. A programação quadrática está disponível por meio da função solve_qp ou chamando um solucionador específico diretamente.
R (Fortran) Estrutura de computação estatística de plataforma cruzada universal licenciada pela GPL .
SAS / OR Um conjunto de solucionadores para otimização linear, inteira, não linear, livre de derivativos, rede, combinatória e de restrição; a linguagem de modelagem algébrica OPTMODEL; e uma variedade de soluções verticais dirigidas a problemas / mercados específicos, todas totalmente integradas com o Sistema SAS .
SuanShu um conjunto de algoritmos de otimização de código aberto para resolver LP , QP, SOCP , SDP , SQP em Java
TK Solver Sistema de software para modelagem matemática e solução de problemas baseado em linguagem declarativa e baseada em regras, comercializado pela Universal Technical Systems, Inc ..
TOMLAB Suporta otimização global, programação inteira, todos os tipos de mínimos quadrados, programação linear, quadrática e irrestrita para MATLAB . TOMLAB suporta solucionadores como Gurobi , CPLEX , SNOPT e KNITRO .
XPRESS Solver para programas lineares de grande escala, programas quadráticos, programas gerais não lineares e de inteiros mistos. Possui API para diversas linguagens de programação, possui também uma linguagem de modelagem Mosel e trabalha com AMPL, GAMS . Gratuito para uso acadêmico.

Veja também

Referências

Leitura adicional

links externos