MATRIZES QUASE-NEWTON ESPARSAS PARA ... - Optimize - UFRJ
MATRIZES QUASE-NEWTON ESPARSAS PARA ... - Optimize - UFRJ
MATRIZES QUASE-NEWTON ESPARSAS PARA ... - Optimize - UFRJ
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>MATRIZES</strong> <strong>QUASE</strong>-<strong>NEWTON</strong> <strong>ESPARSAS</strong> <strong>PARA</strong> PROBLEMAS DE<br />
OTIMIZAÇÃO NÃO LINEAR DE GRANDE PORTE<br />
Evandro da Silveira Goulart<br />
TESE SUBMETIDA AO CORPO DOCENTE DA COORDENAÇÃO DOS<br />
PROGRAMAS DE PÓS-GRADUAÇÃO DE ENGENHARIA DA UNIVERSIDADE<br />
FEDERAL DO RIO DE JANEIRO COMO PARTE DOS REQUISITOS<br />
NECESSÁRIOS <strong>PARA</strong> A OBTENÇÃO DO GRAU DE DOUTOR EM CIÊNCIAS<br />
EM ENGENHARIA MECÂNICA.<br />
Aprovada por:<br />
________________________________________________<br />
Prof. José Herskovits Norman, D.Ing.<br />
________________________________________________<br />
Prof. Francisco José da Cunha Pires Soeiro, Ph.D.<br />
________________________________________________<br />
Prof. Susana Scheimberg de Makler, D.Sc.<br />
________________________________________________<br />
Prof. Anatoli Leontiev, Ph.D.<br />
________________________________________________<br />
Prof. Hélcio Rangel Barreto Orlande, Ph.D.<br />
RIO DE JANEIRO, RJ – BRASIL<br />
AGOSTO DE 2005
GOULART, EVANDRO DA SILVEIRA<br />
Matrizes Quase-Newton Esparsas para<br />
Problemas de Otimização Não-Linear de<br />
Grande Porte [Rio de Janeiro] 2005<br />
VIII, 100 p. 29,7 cm (COPPE/<strong>UFRJ</strong>, D.Sc.,<br />
Engenharia Mecânica, 2005)<br />
Tese - Universidade Federal do Rio de<br />
Janeiro, COPPE.<br />
1. Otimização<br />
2. Programação Não Linear<br />
3. Matrizes Quase-Newton<br />
I. COPPE/<strong>UFRJ</strong> II. Título (série)<br />
ii
iii<br />
À minha mãe Ilza da Silveira Goulart.
Agradecimentos<br />
Ao professor Herskovits, pela orientação e pelo apoio, fundamentais para a<br />
realização deste trabalho.<br />
Aos colegas do laboratório <strong>Optimize</strong> (ainda estou devendo um churrasco).<br />
À minha namorada Ana Paula sempre ao meu lado.<br />
À minha família que sempre me apoiou. João Patrício, Vicente, Neida, Fátima,<br />
Mariana, Antônio e Isabela.<br />
ano).<br />
À amiga Carmen Nilda por suas idéias mirabolantes (eu pretendo ir à praia este<br />
Ao CNPq pelo suporte financeiro.<br />
iv
Resumo da Tese apresentada à COPPE/<strong>UFRJ</strong> como parte dos requisitos necessários<br />
para a obtenção do grau de Doutor em Ciências (D. Sc.)<br />
<strong>MATRIZES</strong> <strong>QUASE</strong>-<strong>NEWTON</strong> <strong>ESPARSAS</strong> <strong>PARA</strong> PROBLEMAS DE<br />
OTIMIZAÇÃO NÃO-LINEAR DE GRANDE PORTE<br />
Orientador: José Herskovits Norman<br />
Programa: Engenharia Mecânica<br />
Evandro da Silveira Goulart<br />
Agosto /2005<br />
Os métodos Quase-Newton em problemas não-lineares de otimização geram<br />
uma aproximação da derivada segunda da função objetivo, nos casos sem restrições, e<br />
da derivada segunda do lagrangeano, nos casos com restrições. As técnicas Quase-<br />
Newton usualmente geram matrizes definidas positivas. Em problemas de otimização de<br />
grande porte, torna-se inviável a utilização do método de atualização Quase-Newton na<br />
sua forma clássica, pois este exige o armazenamento de uma matriz cheia e um grande<br />
número de operações computacionais. As principais técnicas na literatura que ampliam<br />
a atualização Quase-Newton para problemas grandes são o Método de Memória<br />
Limitada e o Método de Atualização Esparsa. Em certos problemas de otimização, as<br />
derivadas das restrições são esparsas, tornando interessante a utilização de uma<br />
atualização Quase-Newton esparsa. Apresenta-se uma nova técnica de atualização<br />
Quase-Newton esparsa através da minimização de uma função baseada na norma<br />
quadrada de Frobenuis que obedece a condição secante e gera uma matriz definida<br />
positiva. Esta atualização aumenta a esparsidade dos sistemas internos do FAIPA<br />
ampliando a eficiência de solvers esparsos durante a resolução de problemas de grande<br />
porte. Resultados numéricos mostram a boa performance dessa nova técnica associada<br />
ao FAIPA.<br />
v
Abstract of Thesis presented to COPPE/<strong>UFRJ</strong> as a partial fulfillment of the<br />
requirements for the degree of Doctor of Science (D. Sc.)<br />
SPARSE QUASI-<strong>NEWTON</strong> MATRICES FOR LARGE-SCALE PROBLEMS<br />
IN NON-LINEAR OPTIMIZATION<br />
Advisor: José Herskovits Norman<br />
Department: Mechanical Engineering<br />
Evandro da Silveira Goulart<br />
August /2005<br />
Quasi-Newton methods for nonlinear optimization construct a matrix that is an<br />
approximation of the second derivative of the function, in the unconstrained case, and of<br />
the second derivative of the Lagrangian when constraints are considered. Usually, the<br />
quasi-Newton matrix must be positive definite. Classic quasi-Newton updating rules get<br />
full matrices, requiring a very large storage area and a great number of computations,<br />
when the number of variables is large. Several techniques were developed to modify<br />
and extend updating quasi-Newton rules in several ways, to make them suitable for<br />
large problems, for instance, the Limited Memory and the Sparse Quasi-Newton<br />
Updates. The Limited Memory method avoids the storage of the quasi-Newton matrix.<br />
However, for several optimization problems, the constraints Jacobian is sparse, making<br />
interesting the use of sparse quasi-Newton matrices. We present a new updating<br />
technique to obtain positive definite sparse quasi-Newton matrices that minimize a<br />
function based on a squared Frobenius norm. This update increases the sparsity of the<br />
internal systems of FAIPA and allows the use of linear systems solvers for sparse<br />
matrices improving the efficiency for very large-scale problems. We present numerical<br />
results that show a good performance of this new technique when associated with the<br />
internal sparse solver in FAIPA.<br />
vi
vii<br />
ÍNDICE<br />
1 – Introdução e Objetivos 1<br />
1.1 – Considerações Gerais 1<br />
1.1 – Organização dos Capítulos 3<br />
2 – FAIPA: Algoritmo de Pontos Interiores por Arcos Viáveis 7<br />
2.1 – Considerações Gerais 7<br />
2.2 – Algoritmo do FAIPA 13<br />
2.3 – Sistemas Simétricos no FAIPA 16<br />
2.4 – Esparsidade dos Sistemas Internos do FAIPA 17<br />
3 – Técnicas Quase-Newton para Problemas de Grandes Porte 20<br />
3.1 – Introdução 20<br />
3.2 – Introdução aos Métodos Quase-Newton 20<br />
3.2.1 – Método Quase-Newton do tipo DFP 21<br />
3.2.2 – Método Quase-Newton do tipo BFGS 23<br />
3.3 – Métodos de Atualização da Matriz Quase-Newton em Problemas Grandes 24<br />
3.3.1 – Método de Memória Limitada 24<br />
3.3.1.1 – Produto Bk v<br />
28<br />
t<br />
3.3.1.2 – Produto B v<br />
u k<br />
3.3.2 – Método de Atualização Esparsa 30<br />
3.3.2.1 – Atualização Esparsa de Toint (1977) 31<br />
3.3.2.2 – Atualização Esparsa de Fletcher (1996) 36<br />
4 – Técnica de Atualização Quase-Newton Diagonal 39<br />
4.1 – Introdução 39<br />
4.2 – Técnica de Atualização Diagonal 39<br />
4.3 – Resolução do Problema 45<br />
29
5 – Métodos Diretos para Solução de Sistemas Lineares Esparsos 48<br />
5.1 – Introdução 48<br />
5.2 – Método Direto 49<br />
5.3 – Método Direto para Sistemas Esparsos 50<br />
5.4 – Esquemas de Armazenamento de Matrizes Esparsas 54<br />
5.5 – Rotina MA27 (HSL) 57<br />
5.6 – Rotina MA28 (HSL) 59<br />
5.7 – Rotina SSTSTRF/S (CRAY SV1) 60<br />
5.8 – Rotina SGETRF/S (LAPACK) 61<br />
6 – Resultados Numéricos 62<br />
6.1 – Introdução 62<br />
6.2 – CUTEr 63<br />
6.3 – Resultados Numéricos – Interface FAIPA_CUTEr 66<br />
6.4 – Apresentação do Problema HS43_NF 69<br />
6.5 – Comparação entre diferentes solvers internos ao FAIPA 70<br />
6.6 – FAIPA Quase-Newton Esparso 72<br />
6.7 – Problema HS43_NF para auxiliar na comparação entre as técnicas de Atualização<br />
Diagonal, BFGS e Memória Limitada<br />
82<br />
6.8 – Problemas CUTEr para auxiliar na comparação entre as técnicas de Atualização<br />
Diagonal e Memória Limitada<br />
7 – Conclusões e Propostas 93<br />
7.1 – Considerações Gerais 93<br />
8 – Referências Bibliográficas 96<br />
viii<br />
84
CAPÍTULO 1<br />
1.1– Considerações Gerais<br />
Introdução e Objetivos<br />
A Otimização trata do problema da busca da melhor alocação de um conjunto<br />
limitado de recursos, escolhendo a alternativa que maximize o lucro ou minimize o<br />
custo, dentre todas aquelas que satisfazem um conjunto específico de restrições.<br />
A otimização pode ser aplicada em numerosas áreas de conhecimento, incluindo:<br />
gestão de cadeias de suprimento (planejamento, produção, distribuição); transporte<br />
(roteiros, gestão de frotas e tripulação); indústria petroquímica (aquisição de materiais,<br />
projeto e operação de refinarias, distribuição); aplicações militares (logística, alocação<br />
de pessoal, operações de guerra); finanças (operação de carteiras, gestão de recursos<br />
financeiros); otimização do projeto de estruturas, veículos terrestres, marítimos e<br />
aeroespaciais, equipamentos para diversas indústrias de processamento em geral [10].<br />
A busca de melhores soluções é um dos grandes objetivos da Engenharia. Desta<br />
forma, a Engenharia tem, cada vez mais, investido na área de otimização para que seja<br />
possível aplicar esta ferramenta em problemas de grande porte. Logo há um grande<br />
interesse em se desenvolver algoritmos de otimização eficientes e robustos [32].<br />
O presente trabalho terá como base o FAIPA (Feasible Arc Interior Point<br />
Algorithm), desenvolvido por HERSKOVITS [24][25][26][27]. Este algoritmo é um<br />
método de Pontos Interiores e Arcos Viáveis que resolve o problema geral de<br />
otimização não-linear, fazendo iterações nas variáveis de projeto e nos multiplicadores<br />
de Lagrange para resolver as condições de otimalidade de Karush-Kuhn-Tucker.<br />
1
Em cada iteração o FAIPA resolve três sistemas lineares internos com a mesma<br />
matriz de coeficientes. Nestes sistemas está incluída a derivada segunda da função<br />
Lagrangiana, H ( x,<br />
λ,<br />
µ ) , ou uma aproximação Quase-Newton ( B ) da mesma.<br />
O FAIPA tem se mostrado confiável e eficiente na solução de problemas de<br />
médio e pequeno porte. Estas características o qualificam para servir como base em<br />
nossos estudos, cujo objetivo é resolver problemas do tamanho requerido pelas<br />
aplicações modernas. O FAIPA vem sendo utilizado em indústrias de primeira linha<br />
assim como em universidades e centros de pesquisa [27].<br />
Em linhas gerais, este trabalho tem como objetivo principal o desenvolvimento<br />
teórico e computacional de técnicas para programação não-linear, baseadas no FAIPA,<br />
para a solução de problemas de grande porte, aproveitando a esparsidade dos sistemas<br />
internos ao FAIPA.<br />
Uma questão que será amplamente abordada diz respeito à atualização da matriz<br />
B no Método Quase-Newton, o qual substitui o cálculo da Hessiana do lagrangeano em<br />
problemas com restrições. Os algoritmos modernos exigem que a matriz B seja definida<br />
positiva, para garantir convergência.<br />
Em problemas com muitas variáveis torna-se inviável a utilização desse método<br />
na sua forma clássica (DFP ou BFGS, por exemplo), pois este exige o armazenamento e<br />
manipulação de uma matriz cheia, de dimensão igual ao número de variáveis. Existem<br />
várias técnicas na literatura que ampliam a atualização Quase-Newton para problemas<br />
grandes. Serão abordadas algumas das principais técnicas: o Método de Memória<br />
Limitada e o Método de Atualização Esparsa.<br />
O Método de Memória Limitada foi desenvolvido inicialmente para problemas<br />
sem restrições e posteriormente estendido para problemas com restrições de caixa. O<br />
FAIPA apresenta uma adaptação para empregar essa técnica em problemas com<br />
quaisquer tipos de restrições não-lineares [16].<br />
Técnicas de atualização esparsas Quase-Newton presentes nos artigos de TOINT<br />
[37][38][39] e FLETCHER [13][14], foram utilizadas como referência na concepção de<br />
uma nova técnica esparsa.<br />
No fim dos anos 70, Toint propôs uma técnica de atualização esparsa para<br />
problemas de grande porte. A técnica Quase-Newton de Toint além de não produzir<br />
uma matriz definida positiva, exige o armazenamento dessa matriz a cada iteração [35].<br />
2
Nos anos 90, Fletcher publicou uma técnica esparsa que não exige o<br />
armazenamento da matriz a cada iteração, pois as informações necessárias para a<br />
atualização são guardadas do mesmo modo que no Método de Memória Limitada. No<br />
entanto, essa técnica além de não gerar matrizes definidas positivas [14], não apresenta<br />
bons resultados numéricos na resolução de problemas de grande porte [35].<br />
No presente trabalho propõe-se uma nova técnica que aproveita o conceito de<br />
memória limitada para armazenar informações do problema durante as iterações e obter<br />
uma matriz B diagonal definida positiva com um reduzido custo computacional.<br />
Essa nova técnica de atualização aumenta a esparsidade dos sistemas lineares<br />
internos do FAIPA, permitindo um melhor aproveitamento de solvers que consideram a<br />
esparsidade de matrizes visando a redução do custo computacional.<br />
Comparou-se o novo método de atualização esparsa e o método de memória<br />
limitada juntamente com o FAIPA.<br />
A solução de problemas de grande porte implica na solução de sistemas lineares<br />
internos ao FAIPA com elevado número de equações. Para resolver tais problemas<br />
integraram-se ao FAIPA técnicas como a utilizada na rotina MA27, desenvolvida pelo<br />
CSE Group [21], utilizada para resolver sistemas de equações lineares simétricos e<br />
esparsos. Essa rotina utiliza o Método Direto baseado numa variante da eliminação<br />
gaussiana para sistemas esparsos [7]. Já foram resolvidos sistemas, junto ao FAIPA,<br />
com 20.000 equações.<br />
Um melhor aproveitamento desses recursos pode ser obtido mediante a<br />
utilização de técnicas de computação de alto desempenho. Uma das alternativas é a<br />
implementação da rotina SSTSTRF/S escrita na linguagem Fortran que resolve sistemas<br />
lineares com estrutura simétrica esparsa através do método direto em ambiente de<br />
computação paralela e vetorial. Ela foi desenvolvida para o ambiente do sistema<br />
operacional UNICOS [4] do computador CRAY SV1, disponível através do Núcleo de<br />
Atendimento em Computação de Alto Desempenho (NACAD-COPPE/<strong>UFRJ</strong>). Essa<br />
rotina auxiliou na obtenção de resultados importantes com o FAIPA em ambiente de<br />
computação de alto desempenho.<br />
Embora nosso objetivo esteja focado na solução de sistemas esparsos, a Técnica<br />
de Memória Limitada junto ao FAIPA requer o uso de solvers para sistemas densos.<br />
Nesse sentido, para um melhor desempenho da Técnica de Memória Limitada com o<br />
3
FAIPA, foi necessária a implementação do solver para sistemas densos não simétricos<br />
SGETRF/S pertencente ao conjunto de rotinas do LAPACK.<br />
Para testar as novas idéias adicionadas no algoritmo FAIPA, utilizou-se uma<br />
ferramenta computacional chamada CUTEr (Constrained and Unconstrained Testing<br />
Environment revisited) que apresenta uma coleção de problemas testes amplamente<br />
utilizados na literatura [17]. O CUTEr é uma ferramenta que auxilia no projeto e<br />
desenvolvimento de softwares em otimização.<br />
Para utilizar essa ferramenta são necessárias duas etapas: a decodificação e<br />
criação da interface. A plataforma de decodificação CUTEr é disponível para sistemas<br />
operacionais UNIX e LINUX. No presente trabalho utilizou-se o sistema operacional<br />
LINUX durante a etapa de decodificação. A interface é um conjunto de rotinas escritas<br />
em FORTRAN 77 e FORTRAN 90 que fornecem os dados referentes aos problemas<br />
testes e devem ser adaptadas ao algoritmo de otimização (no nosso caso o FAIPA).<br />
1.2 – Organização dos capítulos<br />
O trabalho que segue está organizado em capítulos da seguinte forma:<br />
Capítulo 2 – FAIPA: Algoritmo de Pontos Interiores e de Arcos Viáveis:<br />
Está descrito o algoritmo FAIPA, base deste trabalho, e as alterações no FAIPA<br />
Esparso. Essa alterações fazem parte da implementação de solvers que aproveitam a<br />
esparsidade dos sistemas lineares no intuito de resolver problemas de grande porte.<br />
Capítulo 3 – Técnicas Quase-Newton para Problemas de Grande Porte:<br />
Inicialmente descreve-se o principal método Quase-Newton: o BFGS. Em seguida<br />
são apresentadas algumas técnicas já existentes para solucionar o problema de<br />
atualização da matriz Quase-Newton em problemas de grande porte, tais como o<br />
Método de Memória Limitada e Método de Atualização Esparsa.<br />
Nesse capítulo estão descritas as técnicas esparsas dos artigos de Toint e Fletcher<br />
que foram utilizados como referência na concepção de uma nova técnica esparsa.<br />
4
No entanto, o objetivo principal deste capítulo é mostrar como está inserida, nesse<br />
contexto, uma nova técnica numérica para este tipo de atualização que aproveita a<br />
esparsidade na busca de um melhor rendimento computacional em problemas<br />
considerados de grande porte, além de gerar matrizes atualizadas simétricas positivas<br />
definidas.<br />
Capítulo 4 – Técnica de Atualização Quase-Newton Diagonal:<br />
Detalhamento da nova técnica de atualização Quase-Newton diagonal. Com essa<br />
atualização obtêm-se matrizes positivas definidas que apresentam um padrão esparso<br />
que permite melhorar o desempenho do FAIPA na resolução de problemas com um<br />
grande número de variáveis e de restrições.<br />
Capítulo 5 – Técnicas para Solução de Sistemas de Equações Através de<br />
Métodos Diretos:<br />
São apresentados os fundamentos do método de resolução de sistemas esparsos de<br />
equações lineares utilizado na rotina MA27, MA28 e na rotina SSTSTRF/S, sendo esta<br />
última desenvolvida para o ambiente computacional do computador CRAY SV1.<br />
No entanto, para um melhor desempenho da Técnica de Memória Limitada junto ao<br />
FAIPA, foi necessário a implementação de um solver para sistemas densos. Optou-se<br />
pelo solver SGETRF/S pertencente ao conjunto de rotinas do LAPACK.<br />
Capítulo 6 – Testes Numéricos:<br />
Nesse capítulo, inicialmente descreveu-se a ferramenta CUTEr utilizada para<br />
auxiliar na realização de testes numéricos com o FAIPA e apresentou-se o problema<br />
HS43_NF que também auxiliou na tarefa de realizar testes numéricos.<br />
Em seguida, usando o problema HS43_NF, realizaram-se testes para verificação<br />
do desempenho das rotinas MA27 e MA28 quando implementadas no FAIPA.<br />
Logo depois estão os resultados da Nova Técnica de Atualização Quase-Newton<br />
Esparsa. Comparou-se esta técnica com as atualizações BFGS e de Memória Limitada.<br />
5
Mostraremos os gráficos com as iterações do FAIPA quando este usou cada uma das<br />
técnicas.<br />
Por fim, para a obtenção de resultados com problemas maiores através da<br />
interface CUTEr ou com o problema HS43_NF, utilizou-se um computador AMD Atlon<br />
1800 MHz com 1.5Gb de Memória RAM e, principalmente, o computador CRAY SV1<br />
com 12 processadores e 16Gb de memória RAM para comparar o desempenho da<br />
Técnica Esparsa Diagonal com a de Memória Limitada junto ao FAIPA.<br />
Capítulo 7 – Conclusões e Propostas<br />
Este capítulo apresenta as conclusões sobre os resultados obtidos no Capítulo 6<br />
quando foram comparadas várias técnicas de atualização da matriz Quase-Newton (B),<br />
quando associadas ao FAIPA.<br />
Capítulo 8 – Referências Bibliográficas<br />
6
7<br />
CAPÍTULO 2<br />
FAIPA: Algoritmo de Pontos Interiores por<br />
Arcos Viáveis.<br />
2.1 – Considerações Gerais<br />
O algoritmo de pontos interiores por arcos viáveis (FAIPA) é uma técnica nova<br />
para otimização com restrições de desigualdade e restrições de igualdade. FAIPA requer<br />
um ponto inicial no interior das restrições de desigualdades e gera uma seqüência de<br />
pontos interiores. Quando o problema tem somente restrições de desigualdade a função<br />
objetivo é reduzida em cada iteração. Uma função auxiliar é empregada quando existem<br />
também restrições de igualdade.<br />
O fato de fornecer pontos interiores, até mesmo quando as restrições são nãolineares,<br />
torna o FAIPA uma ferramenta eficiente para projetos de otimização em<br />
engenharia.<br />
Considere o problema de programação não linear com restrições de igualdade e<br />
desigualdade:<br />
⎧ minimize<br />
x ⎪<br />
⎨ sujeito a<br />
⎪<br />
⎪<br />
e<br />
⎩<br />
n<br />
f ( x),<br />
x ∈ℜ<br />
g ( x)<br />
h ( x)<br />
i<br />
i<br />
≤<br />
=<br />
0;<br />
0;<br />
i = 1,...,<br />
m<br />
i = 1,...,<br />
p<br />
(2.1)
onde:<br />
n<br />
x∈ ℜ são as variáveis do projeto, f (x)<br />
∈ℜ<br />
é a função objetivo,<br />
as restrições de desigualdade e<br />
Denotaremos<br />
∇ g x)<br />
ℜ<br />
h x ℜ<br />
nxm<br />
( ∈ e<br />
p<br />
( ) ∈ são as restrições de igualdade.<br />
∇ h x)<br />
ℜ<br />
8<br />
g x ℜ<br />
m<br />
( ) ∈ são<br />
nxp<br />
( ∈ as matrizes dos gradientes de g e h,<br />
m<br />
p<br />
respectivamente, e chamaremos de λ ∈ℜ<br />
e µ ∈ℜ<br />
os vetores com os multiplicadores<br />
de Lagrange.<br />
Em (2.2) temos o Lagrangeano do problema (2.1) e em (2.3) temos a Hessiana<br />
do Lagrangeano.<br />
Define-se<br />
t<br />
t<br />
l(<br />
x,<br />
λ , µ ) = f ( x)<br />
+ λ g(<br />
x)<br />
+ µ h(<br />
x)<br />
(2.2)<br />
m<br />
∑<br />
2<br />
2<br />
2<br />
L(<br />
x,<br />
λ , µ ) = ∇ f ( x)<br />
+ λ ∇ g ( x)<br />
+ µ ∇ h ( x)<br />
(2.3)<br />
G ℜ<br />
i=<br />
1<br />
i<br />
i<br />
p<br />
∑<br />
i=<br />
1<br />
mxm<br />
( x)<br />
∈ uma matriz diagonal tal que G ( x)<br />
gi<br />
( x)<br />
i<br />
i<br />
ii = .<br />
O algoritmo FAIPA (Feasible Arc Interior Point Algorithm), proposto por<br />
HERSKOVITS [27], é um método de pontos interiores por arcos viáveis que resolve o<br />
problema geral de otimização não-linear (2.1) fazendo iterações nas variáveis de projeto<br />
x (variáveis primais) e nos multiplicadores de Lagrange (variáveis duais) para resolver<br />
as condições de otimalidade de Karush-Kuhn-Tucker (KKT).<br />
As condições de otimalidade de Karush-Kuhn-Tucker correspondentes ao<br />
problema (2.1) podem ser escritas da seguinte forma:<br />
Um ponto<br />
∇f<br />
( x)<br />
+ ∇g(<br />
x)<br />
λ + ∇h(<br />
x)<br />
µ = 0<br />
G(<br />
x)<br />
λ = 0<br />
h(<br />
x)<br />
= 0<br />
λ ≥ 0<br />
g(<br />
x)<br />
≤ 0<br />
*<br />
x é dito estacionário se existe *<br />
λ e<br />
(2.4)<br />
(2.5)<br />
(2.6)<br />
(2.7)<br />
(2.8)<br />
*<br />
µ tal que as igualdades (2.4),<br />
(2.5) e (2.6) são verdadeiras e será um Ponto de KKT se todas as equações (2.4), (2.5),<br />
(2.6), (2.7) e (2.8) são confirmadas.<br />
As condições de KKT constituem um sistema não-linear de equações e<br />
inequações com as incógnitas ( x , λ,<br />
µ ) . Esse sistema é resolvido considerando as
equações (2.4), (2.5) e (2.6) de tal forma que as desigualdades (2.7) e (2.8) sejam<br />
respeitadas.<br />
FAIPA faz iterações de Newton para resolver as equações não-lineares (2.4),<br />
(2.5) e (2.6) nas variáveis primais e duais.<br />
Com o objetivo de garantir convergência para pontos KKT, um sistema é<br />
resolvido de tal forma que as desigualdades (2.7) e (2.8) sejam satisfeitas em cada<br />
iteração.<br />
Seja S = L(<br />
x,<br />
λ,<br />
µ ) e<br />
mxm<br />
Λ ∈ R uma matriz diagonal com os termos ii i<br />
9<br />
Λ = λ .<br />
Com uma iteração de Newton para a resolução de (2.4), (2.5) e (2.6) obtém-se o<br />
seguinte sistema linear:<br />
⎡ S<br />
⎢ t<br />
⎢<br />
Λ∇g<br />
( x)<br />
t ⎢⎣<br />
∇h<br />
( x)<br />
∇g(<br />
x)<br />
G(<br />
x)<br />
0<br />
∇h(<br />
x)<br />
⎤ ⎡ x0<br />
− x⎤<br />
⎡∇f ( x)<br />
+ ∇g(<br />
x)<br />
λ + ∇h(<br />
x)<br />
µ ⎤<br />
0<br />
⎥ ⎢ ⎥<br />
=<br />
⎢<br />
⎥<br />
⎥ ⎢<br />
λ 0 −λ<br />
⎥<br />
-<br />
⎢<br />
G(<br />
x)<br />
λ<br />
⎥ (2.9)<br />
0 ⎥⎦<br />
⎢⎣<br />
µ − ⎥⎦<br />
⎢⎣<br />
( ) ⎥<br />
0 µ<br />
h x ⎦<br />
onde ( x , λ,<br />
µ ) se referem a iteração atual e x , λ , µ ) se referem ao novo ponto que<br />
( 0 0 0<br />
será obtido. Podemos considerar S ≡ B , isto é, a uma aproximação Quase-Newton de<br />
L ( x,<br />
λ,<br />
µ ) ou considerar, também, S ≡ I , onde I é a identidade.<br />
Considerando que um dos objetivos desse trabalho é propor uma nova técnica de<br />
atualização Quase-Newton, a partir de agora em todos os sistemas do FAIPA que serão<br />
apresentados teremos S ≡ B .<br />
Seja<br />
d ∈ℜ<br />
n<br />
0 tal que d0 = x0<br />
− x<br />
. Através de (2.9) temos:<br />
⎧Bd0<br />
+ ∇g(<br />
x)<br />
λ0<br />
+ ∇h(<br />
x)<br />
µ 0 = −∇f<br />
( x)<br />
⎪ t<br />
⎨Λ∇g<br />
( x)<br />
d0<br />
+ G(<br />
x)<br />
λ0<br />
= 0<br />
⎪ t<br />
⎩∇h<br />
( x)<br />
d0<br />
= −h(<br />
x)<br />
(2.10)<br />
que independe do valor de µ 0 . A resolução do sistema (2.10) fornece a direção d 0 além<br />
de uma nova estimativa dos multiplicadores de Lagrange.
Seja a função potencial<br />
onde na iteração k,<br />
k<br />
ci é tal que<br />
h ( x)<br />
(<br />
h(<br />
x)<br />
10<br />
p<br />
∑<br />
i=<br />
1<br />
φ ( x,<br />
c)<br />
= f ( x)<br />
+ c h ( x)<br />
(2.11)<br />
k i ci<br />
Está provado [24][25] que<br />
i<br />
i<br />
µ 01 ) < 0 , i = 1, 2,<br />
K,<br />
p<br />
(2.12)<br />
+ k<br />
k<br />
k<br />
d0 é uma direção de descida de ( x,<br />
c )<br />
No entanto d 0 não é sempre uma direção viável [27].<br />
φ .<br />
Para obter uma direção viável, um vetor negativo é adicionado ao lado direito de<br />
(2.10).<br />
onde ρ ∈ℜ<br />
é positivo.<br />
⎧Bd+<br />
∇g(<br />
x)<br />
λ + ∇h(<br />
x)<br />
µ = −∇f<br />
( x)<br />
⎪ t<br />
⎨Λ∇g<br />
( x)<br />
d + G(<br />
x)<br />
λ = −ρλ<br />
⎪ t<br />
⎩∇h<br />
( x)<br />
d = 0<br />
(2.13)<br />
t<br />
Agora, d é uma direção viável desde que ∇i g(<br />
x)<br />
d = −ρ<br />
< 0 para as restrições<br />
ativas.<br />
Para assegurar que d é também uma direção de descida, é preciso estabelecer<br />
um critério para a obtenção de ρ de tal forma que:<br />
com ∈(<br />
0,<br />
1)<br />
α , então ∇ ( x,<br />
c)<br />
< 0<br />
d t φ .<br />
t ( x,<br />
c)<br />
≤ αd0<br />
φ(<br />
x,<br />
c)<br />
t<br />
d ∇ φ ∇<br />
(2.14)<br />
Para obter ρ , resolve-se o seguinte sistema auxiliar:
Então, podemos considerar que:<br />
⎧Bd1<br />
+ ∇g(<br />
x)<br />
λ1<br />
+ ∇h(<br />
x)<br />
µ 1 = 0<br />
⎪ t<br />
⎨Λ∇g<br />
( x)<br />
d1<br />
+ G(<br />
x)<br />
λ1<br />
= −λ<br />
⎪ t<br />
⎩∇h<br />
( x)<br />
d1<br />
= 0<br />
0<br />
11<br />
1<br />
(2.15)<br />
d = d + ρd<br />
(2.16)<br />
onde temos que a desigualdade (2.14) é obedecida para qualquer ρ > 0 se<br />
1<br />
( x,<br />
) < 0<br />
d ∇ c<br />
t φ .<br />
Caso contrário, faz-se<br />
que obedece (2.14).<br />
t<br />
( α −1)<br />
d0∇φ<br />
( x,<br />
c)<br />
ρ < , t<br />
(2.17)<br />
d ∇φ(<br />
x,<br />
c)<br />
1<br />
O algoritmo de pontos interiores de direções viáveis (FDIPA) descrito em [24],<br />
utiliza essa direção d como direção de descida. O procedimento de busca linear procura<br />
um passo t que assegure que o novo ponto ( x + td)<br />
satisfaça as restrições de<br />
desigualdade e com um razoável decréscimo na função potencial auxiliar φ x , λ , ) .<br />
( 0 µ 0<br />
No entanto, quando há restrições extremamente não lineares, o comprimento do<br />
passo pode tornar-se muito pequeno acarretando uma convergência mais lenta. Esse fato<br />
é similar ao Efeito Maratos [27].<br />
Basicamente, a idéia para evitar esse problema consiste em fazer uma busca<br />
linear através de um arco de segunda ordem, tangente à direção viável de descida ( d ) e<br />
com curvatura próxima aquela da restrição ativa.<br />
Sendo:<br />
~ I<br />
t<br />
ω = g ( x + d)<br />
− g ( x)<br />
− ∇g<br />
( x)<br />
d i = 1,...,<br />
m<br />
(2.18)<br />
i<br />
i<br />
i<br />
i
~ E<br />
t<br />
ω = h ( x + d)<br />
− h ( x)<br />
− ∇h<br />
( x)<br />
d j = 1,...,<br />
p<br />
(2.19)<br />
i<br />
i<br />
O arco em x é definido da seguinte forma:<br />
onde d ~ é obtido resolvido o sistema (2.21).<br />
x k<br />
i<br />
i<br />
2 ~<br />
+ 1 = x + td + t d<br />
(2.20)<br />
~<br />
⎧<br />
~<br />
Bd<br />
+ ∇g(<br />
x)<br />
λ + ∇h(<br />
x)<br />
~ µ = 0<br />
⎪<br />
t ~ ~ I<br />
⎨Λ∇g<br />
( x)<br />
d + G(<br />
x)<br />
λ = −Λ<br />
~ ω<br />
⎪ t ~ E<br />
⎪⎩<br />
∇h<br />
( x)<br />
d = −<br />
~ ω<br />
12<br />
(2.21)<br />
O arco empregado no FAIPA é representado na Figura 2.1 onde a restrição<br />
gi ( x)<br />
≤ 0 é ativa na iteração k<br />
x . Uma vez que<br />
função potencial φ (x)<br />
em<br />
k<br />
d0 e<br />
k<br />
x , o ângulo com ( )<br />
k<br />
∇φ<br />
x<br />
− é agudo.<br />
k<br />
d são direções de descida da<br />
A Figura 2.1 representa o arco viável no caso em que há uma restrição ativa, isto<br />
é gi(xk)=0. HERSKOVITS et al. [27] prova que é possível caminhar a partir de xk ao<br />
longo de um arco até um novo ponto viável com um valor mais baixo da função<br />
objetivo.<br />
gi(x) = 0<br />
d1<br />
~ Feasible arc<br />
d<br />
ρ d1<br />
d0<br />
Figura 2.1- Arco Viável.<br />
d<br />
xk<br />
−∇φ (x)<br />
∇g (x)
Em problemas que utilizam uma direção de busca e apresentam restrições<br />
altamente não lineares, o grau de convergência dos algoritmos pode ser prejudicado, já<br />
que o passo é muito pequeno. Todavia, o algoritmo FAIPA baseado no método de arcos<br />
viáveis não apresenta este problema de convergência, pois ao definir-se o arco leva-se<br />
em consideração a curvatura da restrição, aumentando assim a convergência do<br />
problema para a solução ótima.<br />
2.2 - Algoritmo do FAIPA<br />
O algoritmo de pontos interiores e arcos viáveis para resolver o problema (2.1) será<br />
descrito abaixo de forma resumida, a fim de se conhecer o seu funcionamento.<br />
Parâmetros:<br />
α ∈(<br />
0,<br />
1)<br />
e ϕ > 0<br />
Dados Iniciais:<br />
x∈ Ω , onde<br />
0<br />
a<br />
λ > 0 , ,<br />
m<br />
λ ∈ R<br />
p<br />
µ > 0 , µ ∈ R ,<br />
0<br />
Ω a representa uma região viável.<br />
nxn<br />
B ∈ R simétrica definida positiva<br />
c = 0 ,<br />
i<br />
p<br />
c ∈ R<br />
Passo 1: Determinação da direção de descida.<br />
(i) Resolva o sistema linear em ( d 0 , λ 0 , µ 0 ), que chamaremos de Sistema (I):<br />
⎡ B<br />
⎢ t<br />
⎢<br />
Λ∇g<br />
( x)<br />
t ⎢⎣<br />
∇h<br />
( x)<br />
∇g(<br />
x)<br />
G(<br />
x)<br />
0<br />
∇h(<br />
x)<br />
⎤ ⎡d0<br />
⎤ ⎡∇f<br />
( x)<br />
⎤<br />
0<br />
⎥ ⎢ ⎥<br />
=<br />
⎢ ⎥<br />
⎥ ⎢<br />
λ 0 ⎥<br />
-<br />
⎢<br />
0<br />
⎥<br />
(2.22)<br />
0 ⎥⎦<br />
⎢⎣<br />
µ ⎥⎦<br />
⎢⎣<br />
( ) ⎥<br />
0 h x ⎦<br />
13
n<br />
m<br />
p<br />
onde d ∈ R , λ ∈ R , µ ∈ R .<br />
0<br />
Se d 0 = 0 , Pare.<br />
0<br />
Passo 2: Determinação da direção restaurada d<br />
14<br />
~ .<br />
0<br />
(ii) Resolva o sistema linear em ( 1 d , λ 1 , µ 1),<br />
que chamaremos de Sistema (II)::<br />
n<br />
m<br />
onde d ∈ R , λ ∈ R ,<br />
1<br />
1<br />
⎡ B<br />
⎢ t<br />
⎢<br />
Λ∇g<br />
( x)<br />
t ⎢⎣<br />
∇h<br />
( x)<br />
∇g(<br />
x)<br />
G(<br />
x)<br />
0<br />
p<br />
µ 1 ∈ R , ii = i<br />
∇h(<br />
x)<br />
⎤ ⎡d1<br />
⎤ ⎡0⎤<br />
0<br />
⎥ ⎢ ⎥<br />
=<br />
⎢ ⎥<br />
⎥ ⎢<br />
λ1<br />
⎥<br />
-<br />
⎢<br />
λ<br />
⎥<br />
0 ⎥⎦<br />
⎢⎣<br />
µ ⎥⎦<br />
⎢⎣<br />
0⎥<br />
1 ⎦<br />
Λ λ , sendo i = 1,...,<br />
m .<br />
(iii) Seja a seguinte função potencial<br />
p<br />
∑<br />
i=<br />
1<br />
(2.23)<br />
φ ( x)<br />
= f ( x)<br />
+ c h ( x)<br />
(2.24)<br />
c<br />
(iv) Se < 1. 2µ<br />
0 ( i)<br />
, então = −2µ<br />
0( i)<br />
, i = 1, 2,<br />
K,<br />
p<br />
c i<br />
(iv) Se ∇ ( x)<br />
> 0<br />
Senão:<br />
d1 c<br />
t φ então:<br />
c i<br />
i<br />
i<br />
t<br />
⎡ 2 ( α −1)<br />
d ∇ ⎤<br />
0 φc<br />
( x)<br />
ρ = min⎢ϕ<br />
d0<br />
; 2 t ⎥<br />
(2.25)<br />
⎣ d1∇φc<br />
( x)<br />
⎦<br />
2<br />
0 2<br />
(v) Determinação da direção de descida d.<br />
ρ = ϕ d<br />
(2.26)<br />
d = d + ρd<br />
(2.27)<br />
0<br />
1
(i) Seja:<br />
~ I<br />
ω i<br />
t<br />
= gi<br />
( x + d)<br />
− gi<br />
( x)<br />
− ∇gi<br />
( x)<br />
d i = 1,...,<br />
m<br />
(2.28)<br />
~ E<br />
ω<br />
t<br />
= h ( x + d)<br />
− h ( x)<br />
− ∇h<br />
( x)<br />
d j = 1,...,<br />
p<br />
(2.29)<br />
i<br />
i<br />
i<br />
i<br />
(ii) Resolva o sistema linear em ( λ µ ~ ~ ~<br />
d , , ), que chamaremos de Sistema (III):<br />
⎡ B<br />
⎢ t<br />
⎢<br />
Λ∇g<br />
( x)<br />
t ⎢⎣<br />
∇h<br />
( x)<br />
∇g(<br />
x)<br />
G(<br />
x)<br />
Onde Λ ii = λi<br />
, sendo i = 1,...,<br />
m .<br />
Passo 3: Busca no arco.<br />
0<br />
~<br />
∇h(<br />
x)<br />
⎤ ⎡d<br />
⎤ ⎡ 0 ⎤<br />
⎥ ⎢ ~ ⎥<br />
=<br />
⎢ I<br />
0<br />
⎥<br />
⎥ ⎢λ<br />
⎥ -<br />
⎢<br />
Λ<br />
~ ω<br />
⎥<br />
⎥ ⎢ ⎥<br />
E<br />
0 ~<br />
⎦ ⎢⎣<br />
⎥<br />
⎣<br />
µ ~<br />
⎦<br />
ω ⎦<br />
15<br />
(2.30)<br />
(i) Encontre um passo de comprimento t que satisfaça um de critério de busca<br />
linear baseado na função potencial auxiliar )<br />
~ 2<br />
φ ( x + td + t d<br />
Passo 4: Atualização.<br />
(i) Obter o novo ponto x + 1 :<br />
k<br />
x k<br />
c<br />
2 ~<br />
+ 1 = x + td + t d<br />
(2.31)<br />
(ii) Se o problema em x + 1 verifica o(s) critério(s) de parada do algoritmo:<br />
k<br />
Pare<br />
Senão<br />
Defina uma nova atualização de λ e B , considerando λ > 0 e B simétrica<br />
positiva definida. Então vá para o Passo 1.
Algumas alternativas para a atualização de λ e B são discutidos em [22]. Elas<br />
conduzem a algoritmos com diferentes performances em termos da velocidade de<br />
convergência local.<br />
O tamanho dos sistemas lineares (2.22), (2.23) e (2.30) é igual à soma do<br />
número das variáveis mais o número de restrições de desigualdade e de igualdade. Em<br />
[27] prova-se que estes sistemas têm uma solução única.<br />
É importante ressaltar que já foi provado que o algoritmo aqui apresentado tem<br />
convergência global para toda matriz B, simétrica definida positiva, e para<br />
qualquer λ > 0 [27].<br />
2.3 – Sistemas Simétricos no FAIPA<br />
Analisando os sistemas lineares (I), (II) e (III) descritos em (2.22), (2.23) e<br />
(2.30), respectivamente, constata-se que todos são assimétricos. Tornar esses sistemas<br />
simétricos é uma alternativa para obtermos uma redução no custo computacional,<br />
considerando-se que o problema de otimização seja de grande porte e que o algoritmo<br />
faça uso da esparsidade das matrizes.<br />
Considerando a equação (2.32) parte do Sistema (I):<br />
Multiplicando (2.32) por<br />
Λ∇g x)<br />
d + G(<br />
x)<br />
λ = 0<br />
t<br />
∇<br />
g t<br />
( 0<br />
0<br />
−1<br />
Λ<br />
−1<br />
( x)<br />
d0<br />
+ Λ G(<br />
x)<br />
λ0<br />
= 0<br />
Da multiplicação entre as matrizes diagonais<br />
uma matriz Ψ (x)<br />
também diagonal onde<br />
ii<br />
i<br />
16<br />
i<br />
−1<br />
Λ e (x)<br />
(2.32)<br />
(2.33)<br />
G na verdade resultará<br />
Ψ ( x) = g ( x)<br />
/ λ<br />
(2.34)
onde<br />
Então (2.34) pode ser escrita da seguinte maneira:<br />
∇g x)<br />
d + Ψ(<br />
x)<br />
λ = 0<br />
t<br />
( 0<br />
0<br />
Substituindo (2.35) em (2.22) temos um novo Sistema (I), porém simétrico.<br />
⎡ B<br />
⎢ t<br />
⎢<br />
∇g<br />
( x)<br />
t ⎢⎣<br />
∇h<br />
( x)<br />
∇g(<br />
x)<br />
Ψ(<br />
x)<br />
0<br />
17<br />
(2.35)<br />
∇h(<br />
x)<br />
⎤ ⎡d0<br />
⎤ ⎡∇f<br />
( x)<br />
⎤<br />
0<br />
⎥ ⎢ ⎥<br />
=<br />
⎢ ⎥<br />
⎥ ⎢<br />
λ 0 ⎥<br />
-<br />
⎢<br />
0<br />
⎥<br />
(2.36)<br />
0 ⎥⎦<br />
⎢⎣<br />
µ ⎥⎦<br />
⎢⎣<br />
( ) ⎥<br />
0 h x ⎦<br />
O mesmo procedimento será feito nos demais sistemas (II) e (III).<br />
O Sistema (II), agora simétrico é descrito em (2.37):<br />
m<br />
e ℜ<br />
⎡ B<br />
⎢ t<br />
⎢<br />
∇g<br />
( x)<br />
t ⎢⎣<br />
∇h<br />
( x)<br />
∇g(<br />
x)<br />
Ψ(<br />
x)<br />
0<br />
∇h(<br />
x)<br />
⎤ ⎡d1<br />
⎤ ⎡0⎤<br />
0<br />
⎥ ⎢ ⎥<br />
=<br />
⎢ ⎥<br />
⎥ ⎢<br />
λ 1 ⎥<br />
-<br />
⎢<br />
e<br />
⎥<br />
(2.37)<br />
0 ⎥⎦<br />
⎢⎣<br />
µ ⎥⎦<br />
⎢⎣<br />
0⎥<br />
1 ⎦<br />
∈ é um vetor com componentes unitárias, isto é, e = 1,<br />
i = 1,...,<br />
m .<br />
O Sistema (III), agora simétrico é descrito em (2.38):<br />
⎡ B<br />
⎢ t<br />
⎢<br />
∇g<br />
( x)<br />
t ⎢⎣<br />
∇h<br />
( x)<br />
∇g(<br />
x)<br />
Ψ(<br />
x)<br />
0<br />
~<br />
∇h(<br />
x)<br />
⎤ ⎡d<br />
⎤ ⎡ 0 ⎤<br />
⎥ ⎢ ~ ⎥<br />
=<br />
⎢ I<br />
0<br />
⎥<br />
⎥ ⎢λ<br />
⎥ -<br />
~<br />
⎢<br />
ω<br />
⎥<br />
⎥ ⎢ ⎥ E<br />
0 ~<br />
⎦ ⎢⎣<br />
⎥<br />
⎣<br />
µ ~<br />
⎦<br />
ω ⎦<br />
i<br />
(2.38)<br />
Além do aproveitamento da simetria e da esparsidade, será proposta uma nova<br />
alternativa de atualização da matriz B.
2.4 – Esparsidade dos Sistemas Internos do FAIPA<br />
Uma matriz é considerada esparsa se muitos dos seus elementos são nulos. Uma<br />
outra maneira de considerar se uma matriz é esparsa, é quando existe a possibilidade de<br />
obter vantagens computacionais ao explorar apenas os elementos diferentes de zero<br />
dessa matriz.<br />
O interesse de aproveitar a esparsidade de matrizes tem se intensificado, cada<br />
vez mais, pois esse tipo de estrutura matricial proporciona uma enorme redução do<br />
custo computacional e também devido ao fato de muitos dos problemas em engenharia<br />
serem esparsos [7].<br />
Seja a matriz não simétrica (2.39) que compõem os sistemas (2.22), (2.23) e<br />
(2.30).<br />
⎡ B<br />
⎢ t<br />
⎢<br />
Λ∇g<br />
( x)<br />
t ⎢⎣<br />
∇h<br />
( x)<br />
∇g(<br />
x)<br />
G(<br />
x)<br />
0<br />
18<br />
∇h(<br />
x)<br />
⎤<br />
0<br />
⎥<br />
⎥<br />
0 ⎥⎦<br />
(2.39)<br />
Para analisar a influência da relação entre o número de variáveis n e de<br />
restrições ( m + p)<br />
no número de elementos nulos da matriz (2.39), montou-se o Gráfico<br />
2.1. No eixo das abscissas temos n /( m + p)<br />
e a porcentagem correspondente de<br />
elementos nulos, no eixo das ordenadas.<br />
Considerou-se dois casos no Gráfico (2.1). O primeiro que chamaremos de Caso<br />
1, considera a matriz Quase-Newton<br />
desigualdade<br />
todas elas densas.<br />
∇ h ) ∈ℜ<br />
∇ g ) ∈ℜ<br />
nxn<br />
B ∈ ℜ , a matriz dos gradientes das restrições de<br />
nxm<br />
( x e a matriz com os gradientes de igualdade<br />
No Caso 2 a matriz<br />
nxp<br />
( x densas.<br />
nxn<br />
B ∈ ℜ é diagonal e mantém-se<br />
∇ h( x)<br />
∈ℜ<br />
∇ g ) ∈ℜ<br />
nxp<br />
nxm<br />
( x e<br />
Analisando as informações do Gráfico (2.1) podemos afirmar que no Caso 1 o<br />
número de elementos nulos diminui quando há mais variáveis que restrições.
No Caso 2 a matriz (2.39) terá 50% de elementos nulos quando há igualdade<br />
entre o número de variáveis e restrições. Para qualquer outra relação entre variáveis e<br />
restrições haverá um aumento no número de elementos nulos na matriz (2.39).<br />
Elementos Nulos (%)<br />
80<br />
70<br />
60<br />
50<br />
40<br />
30<br />
20<br />
10<br />
0<br />
0,20 0,25 0,33 0,50 1 2 3 4 5<br />
Relação Variáveis/Restrições<br />
19<br />
Caso 1<br />
Caso 2<br />
Gráfico 2.1- Influência da relação entre número de variáveis e de restrições<br />
no número de elementos nulos da matriz (2.39).<br />
No Capítulo 4 será apresentada uma técnica de atualização Quase-Newton que<br />
gera matrizes diagonais. Através do Gráfico 2.1 percebemos que essa atualização irá<br />
aumentar significativamente a esparsidade dos sistemas internos do FAIPA utilizados<br />
em cada iteração e permitindo um melhor aproveitamento ao utilizar solvers que<br />
exploram a estrutura da matriz na resolução de sistemas de equações, no intuito de<br />
reduzir o custo computacional.<br />
Serão implementadas no FAIPA alterações na maneira de armazenar as matrizes<br />
dos sistemas esparsos. As estruturas de dados para armazenamento desse tipo de<br />
matrizes consideram apenas os elementos não nulos. Esse assunto será abordado no<br />
Capítulo 5.
3.1 – Introdução<br />
20<br />
CAPÍTULO 3<br />
Técnicas Quase-Newton para Problemas<br />
de Grande Porte<br />
Antes de abordar o assunto principal desse capítulo, a atualização da matriz<br />
Quase-Newton em problemas de grande porte, iniciaremos com uma breve abordagem<br />
sobre os métodos Quase-Newton, do tipo DFP e do tipo BFGS, que obedecem a<br />
condição secante e geram matrizes definida positiva.<br />
Em seguida serão apresentados os métodos de atualização da matriz Quase-<br />
Newton utilizados na resolução de problemas de otimização que apresentam um grande<br />
número de variáveis de projeto. Por fim, será abordado o tema que trata de uma nova<br />
técnica de atualização esparsa da matriz Quase-Newton.<br />
3.2 – Introdução aos Métodos Quase-Newton<br />
onde a função<br />
Seja o seguinte problema:<br />
2<br />
f ∈ C ,<br />
n<br />
x ∈ ℜ e<br />
minimize f ( x)<br />
(3.1)<br />
nxn<br />
F ℜ<br />
2<br />
∈ a Hessiana de f ( F = ∇ f ).
O método de Newton modificado consiste em encontrar um novo ponto a cada<br />
iteração da seguinte forma:<br />
onde<br />
nxn<br />
S ∈ ℜ é uma matriz simétrica,<br />
escolhido de tal forma que minimize f x ) . Se<br />
xk + 1 = xk<br />
- tk<br />
Sk∇f<br />
( xk<br />
)<br />
(3.2)<br />
n<br />
∇ f ∈ℜ<br />
o gradiente da função no ponto e k<br />
( k+<br />
1<br />
21<br />
t é<br />
−1<br />
S = F for a inversa da Hessiana<br />
temos o método de Newton e se S = I , onde I é a matriz identidade, nos temos o<br />
steepest descent.<br />
Através dos métodos Quase-Newton é possível obter uma aproximação<br />
nxn<br />
H ∈ ℜ da inversa da matriz Hessiana, ao invés da exata exigida nos Métodos de<br />
Newton. Essa aproximação é feita obedecendo a Condição Secante descrita em (3.3).<br />
H y = s<br />
k+1<br />
k k<br />
(3.3)<br />
Onde, de acordo com o problema sem restrições (3.1), temos os seguintes<br />
vetores s k e y k :<br />
k = xk<br />
− xk<br />
+ 1<br />
s (3.4)<br />
y ∇f<br />
x ) − ∇f<br />
( x )<br />
(3.5)<br />
k = ( k<br />
k+<br />
1<br />
3.2.1 – Método Quase-Newton do tipo DFP<br />
Nos anos 50, a necessidade de um algoritmo que acelerasse as iterações durante<br />
a resolução de problemas de minimização do tipo (3.1), isto é, que resolvesse<br />
rapidamente com custo computacional reduzido fez com que Davidon [35]<br />
desenvolvesse o primeiro algoritmo Quase-Newton que deu origem ao DFP.<br />
O DFP (Davidon, Fletcher e Powell), um dos primeiros métodos a construir uma<br />
aproximação da inversa da hessiana, foi originalmente proposto por Davidon em 1959, e<br />
posteriormente desenvolvido por Fletcher e Powell em 1963 [35].
nxn<br />
Seja H ∈ ℜ a aproximação da inversa da Hessiana. Então, em cada iteração<br />
temos a seguinte atualização:<br />
s s H<br />
H −<br />
t<br />
t<br />
k k<br />
k +1 = H k + t<br />
sk<br />
yk<br />
k k k k<br />
t<br />
yk<br />
H k yk<br />
(3.6)<br />
−1<br />
Se consideramos a matriz B a aproximação da Hessiana de tal forma que B = H ,<br />
temos em (3.7) a seguinte Condição Secante, também conhecida como Condição Quase-<br />
Newton.<br />
B s = y<br />
22<br />
y<br />
y<br />
H<br />
k+1<br />
k k<br />
(3.7)<br />
Onde (3.3) e (3.7) são duais.<br />
Dessa forma, podemos considerar a seguinte atualização da matriz B :<br />
B s s B y<br />
B +<br />
y<br />
T<br />
T<br />
k+<br />
1 = Bk<br />
− k k k k<br />
T<br />
sk<br />
Bk<br />
sk<br />
k k<br />
T<br />
yk<br />
sk<br />
(3.8)<br />
A equação (3.8) é denominada atualização BFGS da matriz B .<br />
Outra regra de atualização de H é a inversão de k+<br />
1<br />
B apresentada na Equação<br />
(3.9). Para isto utiliza-se a fórmula de Sherman-Morrison para se determinar H :<br />
H<br />
⎛<br />
+<br />
⎝<br />
y<br />
H<br />
y<br />
⎞ s<br />
s<br />
s<br />
y<br />
+ H<br />
t<br />
t t<br />
t<br />
k H k ⎜<br />
+ 1 = + 1 k k<br />
t<br />
yk<br />
sk<br />
k k k<br />
⎟ t<br />
sk<br />
yk<br />
− k k k<br />
t<br />
yk<br />
sk<br />
k k k<br />
(3.9)<br />
⎠<br />
A equação (3.9) é denominada regra de atualização BFGS da matriz H .<br />
H<br />
y<br />
s<br />
k+<br />
1
3.2.2 – Método Quase-Newton do tipo BFGS<br />
O mais popular dos métodos Quase-Newton é o BFGS, denominado dessa<br />
maneira para referir-se aos idealizadores da técnica: Broyden, Fletcher, Goldfarb e<br />
Shanno.<br />
A atualização BFGS da matriz B k+<br />
1 é apresentada em (3.8), onde s k e yk são<br />
descritos em (3.4) e (3.5), respectivamente.<br />
Em problemas sem restrições, a atualização BFGS produzirá uma matriz B k+<br />
1<br />
simétrica definida positiva sempre que a matriz B k também seja definida positiva e que<br />
se verifique, além da Condição Quase-Newton (3.7), a seguinte condição de curvatura:<br />
T<br />
s > 0<br />
(3.20)<br />
k yk<br />
Em problemas com restrições, o vetor y k é obtido da seguinte maneira:<br />
y = ∇ l x + , λ + , µ + ) − ∇ l(<br />
x , λ , µ )<br />
(3.21)<br />
k<br />
x ( k 1 k 1 k 1 x k k k<br />
onde l é o lagrangeano da função objetivo.<br />
No entanto, em problemas com restrições, a Hessiana exata do problema não é<br />
necessariamente definida positiva na solução. Portanto, nesses casos, nem sempre é<br />
possível garantir que a matriz B obtida através da atualização BFGS seja definida<br />
positiva. Para superar essa dificuldade, Powell propôs uma modificação da atualização<br />
BFGS [24].<br />
Ele sugeriu que se<br />
s y < 0.<br />
2s<br />
B s<br />
(3.22)<br />
T<br />
k<br />
k<br />
então calcula-se φ para obter um novo y k , mantendo-se o mesmo s k .<br />
T<br />
k<br />
k<br />
k<br />
T<br />
k<br />
k<br />
k k<br />
T<br />
sk<br />
23<br />
k<br />
T<br />
0.<br />
8 sk<br />
B s<br />
φ =<br />
(3.23)<br />
s B s − y<br />
k
O novo yk é obtido da seguinte maneira:<br />
y = φ y + ( 1−<br />
φ)<br />
B s<br />
(3.24)<br />
k<br />
k<br />
24<br />
k<br />
k<br />
E, por fim, com novo vetor y k , além de s k e B k , através da mesma equação<br />
(3.17) temos a atualização de B k+<br />
1 para o problema com restrições.<br />
3.3 – Métodos de Atualização da Matriz Quase-Newton em Problemas Grandes<br />
O Método Quase-Newton, na sua forma clássica (BFGS, por exemplo), não pode<br />
ser usado para otimização de problemas grandes, pois gera e, por conseqüência,<br />
manipula matrizes densas, o que torna o custo computacional elevado e inviável. É<br />
possível, no entanto, modificar e estender esse método de diversas maneiras afim de<br />
torná-lo eficiente para a resolução de problemas de grande porte [35].<br />
As principais técnicas para esse tipo de atualização são as seguintes:<br />
Método de Memória Limitada;<br />
Método de Atualização Esparsa;<br />
3.3.1 – Método de Memória Limitada<br />
A técnica de memória limitada, concebida para resolução de problemas de<br />
otimização não linear de grande porte, é baseada no método quase-Newton, permite<br />
aproximar a inversa da matriz Hessiana da função que se deseja minimizar sem a<br />
necessidade de armazenamento dessa matriz. As vantagens deste método estão na<br />
economia no armazenamento em memória e na redução do número de operações [2].
Considerando inicialmente a aproximação BFGS da Hessiana apresentada na<br />
equação (3.22).<br />
Sendo B<br />
(3.27), respectivamente<br />
onde ∇f ( xk<br />
+ 1)<br />
e f ( xk<br />
)<br />
B s s B y y<br />
B k+1<br />
= Bk<br />
− +<br />
y<br />
k k<br />
T<br />
k k<br />
T<br />
sk<br />
Bk<br />
sk<br />
25<br />
T<br />
k k<br />
T<br />
k sk<br />
(3.25)<br />
a aproximação da Hessiana e os vetores s k e yk descritos em (3.26) e<br />
s = x +1 − x<br />
(3.26)<br />
k<br />
k<br />
k<br />
y = ∇f<br />
x + ) − ∇f<br />
( x )<br />
(3.27)<br />
k<br />
( k 1 k<br />
∇ são os gradientes da função objetivo nos pontos k+<br />
1<br />
x e x k<br />
respectivamente.<br />
Segundo [2], é possível representar de forma mais conveniente a regra de<br />
atualização BFGS da equação (3.25). Esta nova forma é conhecida como uma<br />
representação compacta da matriz BFGS e está descrita em (3.28).<br />
Seja B 0 uma matriz simétrica positiva definida e assumido-se que os k pares<br />
k−1<br />
t<br />
{ s i yi}<br />
i=<br />
1 satisfazem s i yi<br />
> 0.<br />
Seja B k obtida na ésima<br />
k atualização de 0<br />
k−1<br />
direta BFGS (3.25), ao tomarmos os pares { s } podemos então escrever<br />
sendo<br />
B<br />
k<br />
onde S k e Y k são matrizes ( n×<br />
k);<br />
i yi<br />
i=<br />
1<br />
k 0 k k k 0<br />
[ B0S<br />
k Yk<br />
] ⎢ t ⎥ ⎢ t ⎥<br />
⎣ Lk<br />
− Dk<br />
⎦ ⎣ Yk<br />
⎦<br />
B pela fórmula<br />
t<br />
t<br />
⎡S<br />
B S L ⎤ ⎡S<br />
B ⎤<br />
= B0<br />
−<br />
(3.28)<br />
−1<br />
S = s ,...., s ]<br />
(3.29)<br />
k<br />
[ 0 k<br />
Y = y ,...., y ]<br />
(3.30)<br />
k<br />
[ 0 k
( L ) é uma matriz triangular ( k × k)<br />
k<br />
k<br />
ij<br />
D é uma matriz diagonal ( k × k)<br />
.<br />
k−1<br />
i=<br />
1<br />
t ⎧ si−1<br />
y j−1<br />
se i > j<br />
( Lk<br />
) ij = ⎨<br />
(3.31)<br />
⎩0<br />
caso contrário<br />
t<br />
t<br />
D [ s y ,..., s y ]<br />
(3.32)<br />
k = diag 0 0 k−1<br />
k−1<br />
Usando o esquema apresentado em [2], ao invés de se considerar os k pares<br />
{ s } para atualizar a matriz B , é possível tomar somente os m últimos pares.<br />
i yi<br />
Durante as primeiras k iterações, quando k ≤ m , as matrizes S k e Y k armazenarão os<br />
k pares de vetores s e y . Nas iterações subseqüentes quando k > m , o procedimento<br />
de atualização de S k e Y k é alterado de tal forma que sejam removidos os pares s e y<br />
mais antigos e adicionados pares mais novos.<br />
onde:<br />
Além disso, assume-se que = ε I , e reformula-se a equação (3.28):<br />
B<br />
são matrizes ( n× k);<br />
k<br />
= ε I −<br />
( L ) é uma matriz triangular ( k ×<br />
k);<br />
k<br />
ij<br />
k<br />
B0 k<br />
t ⎡ε<br />
S S<br />
k k k k k k<br />
[ ε k Sk<br />
Yk<br />
] ⎢ t ⎥ ⎢ t ⎥<br />
⎣ Lk<br />
− Dk<br />
⎦ ⎣ Yk<br />
⎦<br />
26<br />
L<br />
⎤<br />
−1<br />
⎡ε<br />
S<br />
t<br />
⎤<br />
(3.33)<br />
S s ,...., s ]<br />
(3.34)<br />
k = [ k−m<br />
k−1<br />
Y y ,...., y ]<br />
(3.35)<br />
k = [ k−m<br />
k−1<br />
t ⎧ sk<br />
−m−1+<br />
i yk<br />
−m−1+<br />
j se i > j<br />
( Lk<br />
) ij = ⎨<br />
(3.36)<br />
⎩ 0 caso contrário
t<br />
t<br />
D diag [ s y ,..., s y ]<br />
(3.37)<br />
k = k−m<br />
k−m<br />
k−1<br />
k−1<br />
D k é uma matriz diagonal e ε k um escalar positivo qualquer. Em [3], recomenda-se:<br />
y s<br />
ε k =<br />
(3.38)<br />
s<br />
t<br />
k−1<br />
k−1<br />
t<br />
k−1s<br />
k−1<br />
No entanto, em [16], recomenda-se ε = 1.<br />
Nesta última formulação as matrizes têm a dimensão relacionada aos últimos m<br />
pares de vetores s e y [(3.34) e (3.35)] e não mais ao total de k iterações como mostrado<br />
em (3.29) e (3.30). A matriz Quase-Newton, B , continua com a mesma dimensão<br />
( n× n).<br />
Observa-se que a matriz<br />
⎡<br />
⎢<br />
⎣<br />
k<br />
27<br />
⎤<br />
⎥<br />
⎦<br />
t<br />
Sk B0<br />
Sk<br />
Lk<br />
t<br />
(3.39)<br />
Lk<br />
− Dk<br />
da equação (3.28) é indefinida.<br />
Porém, sua inversão pode ser feita, utilizando-se o método de fatorização de<br />
Cholesky, da seguinte maneira:<br />
⎡− D<br />
⎢<br />
⎣ Lk<br />
k<br />
1<br />
t ⎡<br />
L ⎤<br />
2<br />
k ⎢ Dk<br />
⎥ =<br />
t<br />
S ⎢<br />
k B0S<br />
k ⎦<br />
⎢⎣<br />
− Lk<br />
D<br />
1<br />
2<br />
k<br />
⎤ ⎡<br />
0 ⎥ ⎢−<br />
Dk<br />
⎥ ⎢<br />
V ⎥ ⎣ 0<br />
k ⎦<br />
onde V k é uma matriz triangular inferior que satisfaz<br />
singular.<br />
Se 0<br />
V<br />
k<br />
V<br />
t<br />
k<br />
t<br />
k<br />
1<br />
2<br />
− L D<br />
k<br />
t<br />
k<br />
V<br />
1<br />
2<br />
k<br />
⎥ ⎥<br />
⎤<br />
⎦<br />
(3.40)<br />
= S B S + L D L ,<br />
(3.41)<br />
0<br />
t<br />
k<br />
k<br />
−1<br />
t<br />
k k<br />
B é positiva definida e si yi<br />
≥ 0, i = 1,...,<br />
k −1,<br />
então V k existe e não é
Logo, tem-se uma nova forma de representar a atualização da matriz Quase-<br />
Newton dada por:<br />
B<br />
k<br />
= ε I −<br />
k<br />
⎡<br />
−<br />
⎣ 0<br />
1<br />
2<br />
1<br />
−<br />
t<br />
[ ] ⎢ D ⎥ k<br />
k<br />
k D 2<br />
Yk<br />
ε k S<br />
k L<br />
k<br />
k ⎢ 1 ⎥ ⎢ ⎥<br />
⎢<br />
⎥<br />
t<br />
t<br />
⎣ε<br />
k Sk<br />
⎦<br />
V<br />
k<br />
⎤<br />
⎦<br />
28<br />
-1<br />
⎡ 1<br />
⎢ D 2<br />
⎢<br />
⎣−<br />
Lk<br />
D<br />
2<br />
k<br />
⎤<br />
0 ⎥<br />
V ⎥<br />
k ⎦<br />
-1<br />
⎡<br />
Y<br />
t<br />
⎤<br />
(3.42)<br />
Nesta última formulação as matrizes têm a dimensão relacionada com os últimos<br />
m pares de vetores s e y, e não mais ao total de k iterações. A matriz Quase-Newton,<br />
B k , continua com a mesma dimensão ( n × n)<br />
. Na prática sugere-se que m ≤ 7 [2].<br />
A técnica de memória limitada na realidade não armazena a matriz B da iteração<br />
anterior e as informações necessárias estão armazenadas nos vetores S e Y. Como não<br />
há armazenamento, faz-se uso de artifícios para obtenção de produtos entre vetores e a<br />
matriz B.<br />
Usando-se a equação (3.42) serão apresentadas algumas operações envolvendo a<br />
matriz B k . Tais operações serão úteis quando for utilizada a técnica de memória<br />
limitada junto ao algoritmo do FAIPA [10].<br />
As operações destacadas são as seguintes: produto de B k por um vetor v e<br />
t<br />
u k<br />
produto B v , onde u e v são vetores de dimensão n.<br />
3.3.1.1 - Produto Bk v<br />
O produto de B k por um vetor v é determinado da seguinte forma:<br />
- dados: x k , S k , Y k , k ,<br />
L k<br />
D e ε ;<br />
k<br />
t<br />
−1<br />
t<br />
- efetuar a fatorização de Cholesky de ε S S + L D L para se obter V .<br />
- resolver a equação (3.43):<br />
-1<br />
1 1<br />
-1<br />
⎡ − ⎤<br />
2 2 t<br />
p = ⎢−<br />
Dk<br />
Dk<br />
Lk<br />
⎥<br />
1<br />
t<br />
⎢<br />
t ⎥<br />
⎣ 0 V<br />
2<br />
k ⎦<br />
k<br />
1 ⎡<br />
2<br />
⎢ Dk<br />
⎢<br />
⎢⎣<br />
− Lk<br />
D<br />
k<br />
k<br />
⎤<br />
0 ⎥<br />
⎥<br />
Vk<br />
⎥⎦<br />
k<br />
k<br />
k<br />
t ⎡ Y ⎤ k v<br />
⎢ ⎥<br />
⎣ε<br />
k Sk<br />
v⎦<br />
k<br />
k<br />
(3.43)
- efetuar o produto<br />
t<br />
3.3.1.2 - Produto B v<br />
u k<br />
v = ε v - [ Y ε S ]p<br />
(3.44)<br />
Bk k k k k<br />
t<br />
O produto de B v , onde u e v são vetores de dimensão n é determinado da<br />
seguinte forma:<br />
u k<br />
- dados S k , Y k , L k e D k<br />
- define-se W k<br />
k<br />
[ Y S ]<br />
t t t<br />
- calcular u Yk<br />
, u ε k Sk<br />
, Yk v e S v<br />
t<br />
ε k k<br />
t t<br />
- determinar u Wk<br />
e Wk v<br />
- efetuar a decomposição de Cholesky de<br />
t<br />
kuv - calcular ε .<br />
- resolver (3.46)<br />
t<br />
t<br />
u B v = ε u v<br />
k<br />
k<br />
-<br />
t<br />
u W<br />
k<br />
W = ε<br />
(3.45)<br />
⎡<br />
⎢−<br />
D<br />
⎢<br />
⎣ 0<br />
1<br />
2<br />
k<br />
k<br />
k<br />
k<br />
1<br />
− ⎤<br />
2 t<br />
Dk<br />
Lk<br />
⎥<br />
t<br />
V ⎥<br />
k ⎦<br />
29<br />
-1<br />
S<br />
t<br />
k<br />
S<br />
k<br />
1 ⎡<br />
2<br />
⎢ Dk<br />
⎢<br />
⎢⎣<br />
− Lk<br />
D<br />
+ L D L para obter V ;<br />
1<br />
2<br />
k<br />
k<br />
−1<br />
t<br />
k k<br />
⎤<br />
0 ⎥<br />
⎥<br />
Vk<br />
⎥⎦<br />
-1<br />
W<br />
t<br />
k<br />
v<br />
k<br />
(3.46)
3.3.2 – Método de Atualização Esparsa<br />
É um assunto que foi explorado e abandonado no fim dos anos 70 com Toint<br />
[37][38][39] e ressurgiu no meio da década de 90 com Fletcher [13][14]. Consiste<br />
basicamente no desenvolvimento da atualização Quase-Newton adotando um<br />
2<br />
determinado padrão de esparsidade para a matriz Hessiana ( ∇ f ).<br />
Antes de descrevermos as técnicas esparsas de Toint e Fletcher, é necessário<br />
definir a norma de Frobenius, que será utilizada para resolver tais problemas de<br />
atualização.<br />
A norma de Frobenius . F<br />
Seja M a matriz:<br />
⎡M<br />
M =<br />
⎢<br />
⎢<br />
M<br />
⎢⎣<br />
M<br />
de uma matriz é definida da seguinte maneira.<br />
11<br />
n1<br />
L<br />
O<br />
L<br />
M<br />
M<br />
30<br />
1n<br />
Onde M ∈ℜ<br />
, sendo i = 1,...,<br />
n e j = 1,...,<br />
n .<br />
Então:<br />
ou<br />
ij<br />
M<br />
M<br />
F<br />
2<br />
F<br />
=<br />
=<br />
n<br />
n<br />
∑∑<br />
i=<br />
1 j=<br />
1<br />
n<br />
n<br />
∑∑<br />
i=<br />
1 j=<br />
1<br />
M<br />
M<br />
M<br />
nn<br />
⎤<br />
⎥<br />
⎥<br />
⎥⎦<br />
(3.47)<br />
2<br />
ij<br />
(3.48)<br />
2<br />
ij<br />
(3.49)
3.3.2.1 – Atualização Esparsa de Toint (1977)<br />
k+<br />
1<br />
Toint apresenta o problema de atualização esparsa considerando que a matriz<br />
B é a solução do seguinte problema quadrático descrito abaixo:<br />
onde<br />
minimize<br />
e<br />
Bk + 1<br />
sujeito a<br />
B<br />
2<br />
Bk+<br />
1 − Bk<br />
= ∑[(<br />
B<br />
F<br />
B<br />
k+<br />
1<br />
( B<br />
s<br />
k+<br />
1 k<br />
= B<br />
)<br />
k+<br />
1 ij<br />
= y<br />
t<br />
k+<br />
1<br />
k<br />
= 0<br />
(i,j) ∈ I<br />
∀(<br />
i,j)<br />
∈ I<br />
31<br />
k+<br />
1 ij<br />
⋅ denota a norma de Frobenius;<br />
F<br />
) − ( B ) ]<br />
os vetores s k e y k são s k = xk<br />
− xk<br />
−1<br />
e y k = ∇f<br />
( xk<br />
) − ∇f<br />
( xk<br />
−1)<br />
2<br />
I {( i,<br />
j)<br />
| [ ∇ f ( x)]<br />
= 0}<br />
= ij<br />
2<br />
J {( i,<br />
j)<br />
| [ ∇ f ( x)<br />
] ≠ 0}<br />
= ij<br />
k<br />
ij<br />
2<br />
⎫<br />
⎪<br />
⎪<br />
⎬<br />
⎪<br />
⎪<br />
⎪⎭<br />
(3.50)<br />
A solução B k é obtida resolvendo um sistema linear com n equações e<br />
conservando o mesmo padrão de esparsidade I .<br />
Em [37], Toint apresenta, além da formulação do problema, o procedimento de<br />
atualização assumindo que a matriz B possui dimensões n× n , esparsa e simétrica onde<br />
seus elementos são números reais. As condições de esparsidade não são aplicadas aos<br />
elementos da diagonal, isto é, eles não podem ser nulos.<br />
t<br />
O objetivo, então, é obter a matriz B k+<br />
1 ( B B 1)<br />
Bk k<br />
que satisfaça a seguinte condição secante<br />
onde s k e<br />
k+<br />
1 = k+<br />
+1 = B + E<br />
(3.51)<br />
B +1 s = y<br />
(3.52)<br />
k<br />
k<br />
n<br />
yk ∈ R , e o padrão de esparsidade de k<br />
k<br />
B é mantido em B 1 .<br />
k+
A matriz E é chamada de Matriz de Correção.<br />
As condições de esparsidade podem ser descritas da seguinte maneira:<br />
( B ) ( B 1 ) = 0<br />
(3.53)<br />
k ij = k+<br />
ij<br />
desde que os pares ( i , j ) ∈ I , sendo I um conjunto de pares inteiros.<br />
Há também um conjunto J que contém os pares não pertencentes a I e<br />
( k ij ≠ k+<br />
1 ij ≠<br />
B ) 0 e ( B ) 0<br />
(3.54)<br />
desde que os pares ( i , j ) ∈ J , sendo J um conjunto de pares inteiros. Considera-se<br />
(i,i) ∈ J , para todo i.<br />
Para resolver o problema, Toint sugere o seguinte procedimento descrito a seguir<br />
cujo objetivo final é obter a Matriz de Correção.<br />
Considerando a equação (3.51) e a equação secante (3.52) temos:<br />
Fazendo:<br />
Então:<br />
( B + E)<br />
s = y<br />
(3.55)<br />
k<br />
k<br />
k<br />
k<br />
k<br />
32<br />
k<br />
Es = y − B s<br />
(3.56)<br />
k<br />
k<br />
k<br />
k<br />
r = y − B s<br />
(3.57)<br />
r = Esk<br />
(3.58)<br />
Toint sugere a criação de uma matriz descrita em (3.59) que permite reescrever a<br />
equação (3.58).<br />
⎧ s j , ∀(<br />
i,<br />
j)<br />
∈ J<br />
X ( i,<br />
j)<br />
= ⎨<br />
(3.59)<br />
⎩ 0,<br />
∀(<br />
i,<br />
j)<br />
∈ I
Reescrevendo (3.58) temos:<br />
r<br />
i<br />
=<br />
n<br />
∑<br />
j=<br />
1<br />
E<br />
ij<br />
X<br />
ij<br />
, onde i = 1,...,<br />
n<br />
(3.60)<br />
Seja uma matriz C, podemos considerar a matriz de correção da seguinte forma:<br />
T<br />
E = 0.<br />
5(<br />
C + C )<br />
(3.61)<br />
O problema pode ser considerado da seguinte forma:<br />
minimize<br />
E<br />
sujeito a<br />
onde<br />
1<br />
8<br />
n<br />
∑<br />
j=<br />
1<br />
C + C<br />
ij<br />
T<br />
ji<br />
i = 1,...,n<br />
F<br />
[ ( C + C ) X<br />
2<br />
33<br />
ij<br />
⎫<br />
⎪<br />
⎪<br />
] = 2ri<br />
⎬<br />
⎪<br />
⎪<br />
⎪⎭<br />
(3.62)<br />
Da mesma forma que em [19], o lagrangeano da função do problema (3.62) é o<br />
seguinte:<br />
n<br />
n<br />
∑∑<br />
1<br />
2 2<br />
Φ(<br />
C, λ ) = ( C + + 2 ) − { ( [ ( + ) ] - 2 }<br />
8<br />
ij C ji CijC<br />
ji λi<br />
Cij<br />
C ji X ij ri<br />
(3.63)<br />
i=<br />
1 j=<br />
1<br />
Diferenciando em relação a Cij temos:<br />
∂Φ(<br />
C,<br />
λ)<br />
= 0.5(<br />
C<br />
∂C<br />
Sendo i = 1,...,<br />
n e j = 1,...,<br />
n .<br />
ij<br />
ij<br />
+ C<br />
ji<br />
n<br />
n<br />
∑ ∑<br />
i=<br />
1 j=<br />
1<br />
) − λ X<br />
i<br />
ij<br />
− λ X<br />
j<br />
ji<br />
= 0<br />
Podemos usar a equação (3.61) para reescrever a (3.64):<br />
(3.64)<br />
E λ X − λ X = 0<br />
(3.65)<br />
ij − i ij j ji
Substituindo (3.66) em (3.60):<br />
r<br />
i<br />
=<br />
n<br />
∑<br />
j=<br />
1<br />
Que pode ser reescrita:<br />
i<br />
n<br />
∑<br />
i<br />
j=<br />
1<br />
E = λ X + λ X<br />
(3.66)<br />
ij<br />
i<br />
ij<br />
j<br />
34<br />
ji<br />
[( λ X + λ X ) X ] , onde i = 1,...,<br />
n<br />
(3.67)<br />
i<br />
ij<br />
ij<br />
n<br />
∑<br />
j=<br />
1<br />
j<br />
j<br />
ji<br />
ji<br />
ij<br />
2<br />
r = λ ( X ) + ( λ X X ) , onde i = 1,...,<br />
n<br />
(3.68)<br />
ij<br />
Podemos transformar ainda mais a equação (3.68) ao criar a matriz Q da<br />
seguinte forma:<br />
Q<br />
ij<br />
= X<br />
ij<br />
X<br />
ij<br />
+<br />
n<br />
∑<br />
k=<br />
1<br />
( X δ , onde i = 1,...,<br />
n e j = 1,...,<br />
n<br />
(3.69)<br />
2<br />
ik )<br />
ij<br />
Então temos o seguinte sistema de equações onde a incógnita é λ .<br />
Q λ = r<br />
(3.70)<br />
Por fim, com λ , o vetor solução de (3.70), junto a equação (3.66), obtém-se a<br />
matriz de correção.<br />
É possível reescrever resumidamente o processo descrito acima para a resolução<br />
do problema que consiste em encontrar a matriz de correção segundo a técnica esparsa<br />
de Toint:<br />
minimize<br />
sujeito a<br />
e<br />
E<br />
2<br />
0.<br />
5 E<br />
⎫<br />
F ⎪<br />
Es<br />
⎪<br />
k = yk<br />
− Bk<br />
sk<br />
⎬<br />
t<br />
E = E<br />
⎪<br />
⎪<br />
Eij<br />
= 0 ∀(<br />
i,<br />
j)<br />
∈ I ⎭<br />
(3.71)
Para a resolução de (3.71) define-se a matriz X de dimensões n x n:<br />
⎧ s j , ∀(<br />
i,<br />
j)<br />
∈ J<br />
X ( i,<br />
j)<br />
= ⎨<br />
(3.72)<br />
⎩ 0,<br />
∀(<br />
i,<br />
j)<br />
∈ I<br />
Em seguida obtém-se a matriz Q da seguinte forma:<br />
onde δ é o delta de Kronecker descrito em (3.74).<br />
Q = X X + X ( i,<br />
:) δ<br />
(3.73)<br />
ij<br />
ij<br />
ji<br />
35<br />
2<br />
ij<br />
⎧ 1,<br />
i = j<br />
δ ij = ⎨<br />
(3.74)<br />
⎩ 0,<br />
i ≠ j<br />
De posse da matriz Q é possível resolver o sistema (3.75) e obter o vetor λ para<br />
utilizá-lo em (3.76) e encontrar a matriz de correção E .<br />
Então, obtém-se a matriz de correção:<br />
E<br />
ij<br />
⎧ 0,<br />
= ⎨<br />
⎩ λi<br />
X<br />
Qλ = y − B s<br />
(3.75)<br />
ij<br />
k<br />
+ λ X<br />
j<br />
ji<br />
k<br />
k<br />
∀(<br />
i,<br />
j)<br />
∈ I<br />
, ∀(<br />
i,<br />
j)<br />
∈ J<br />
Agora é possível encontrar a matriz B k 1 definido na equação (3.51).<br />
+<br />
(3.76)<br />
Dentre as várias desvantagens dessa técnica é que, além de não garantir que B k 1<br />
seja definida positiva, exige a resolução de um sistema de equações (3.75) com muitas<br />
variáveis [31]. Além disso, é necessário o armazenamento da matriz B a cada iteração.<br />
+
3.3.2.2 – Atualização Esparsa de Fletcher (1996)<br />
Em [14], Fletcher apresenta uma outra maneira para descrever o método de<br />
atualização esparsa. Ele considera, agora, que a matriz B k 1 é a solução do seguinte<br />
problema quadrático:<br />
onde<br />
minimize<br />
e<br />
BK + 1<br />
sujeito a<br />
B<br />
B<br />
( B<br />
k+<br />
1<br />
k+<br />
1<br />
S<br />
k<br />
= B<br />
)<br />
k+<br />
1 ij<br />
−Y<br />
t<br />
k+<br />
1<br />
= 0<br />
⋅ denota a norma de Frobenius;<br />
F<br />
k<br />
2<br />
36<br />
⎫<br />
⎪<br />
⎪<br />
⎬<br />
∀(<br />
i,<br />
j)<br />
∉ J ⎪<br />
⎪<br />
⎭<br />
F<br />
+<br />
(3.77)<br />
as matrizes S k e Y k contém os m diferentes pares s i e y i , i = 1,...,<br />
m .<br />
S k = [ sk<br />
−m+<br />
1,..., sk<br />
]<br />
(3.78)<br />
Y k = [ yk<br />
−m+<br />
1,..., yk<br />
]<br />
(3.79)<br />
os vetores s k e y k são s k = xk<br />
− xk<br />
−1<br />
e y k = ∇f<br />
( xk<br />
) − ∇f<br />
( xk<br />
−1)<br />
2<br />
J = { ( i , j)<br />
| [ f ( x)]<br />
≠ 0}<br />
∇ ij<br />
Ainda em [12], Fletcher mostra que o problema apresenta solução única se S k<br />
satisfaz a condição de independência linear entre as colunas da matriz. Considerando-se<br />
isso, k+<br />
1<br />
B pode ser obtida através da solução de um sistema definido positivo, porém<br />
não é garantido, também, que B k+<br />
1 seja positiva definida [31].<br />
O sistema (3.80) é proposto por Fletcher em [12] para auxiliar na resolução do<br />
problema (3.77).<br />
P KP b<br />
t<br />
= w<br />
(3.80)<br />
Antes de descrever esse sistema, é preciso apresentar alguns conjuntos, matrizes<br />
e vetores necessários para uma melhor compreensão. Além disso, será introduzido o<br />
operador vec que será utilizado para transformar matrizes em vetores.
O conjunto L é definido como aquele que contém os pares que indicam os<br />
elementos da parte triangular inferior de B e que pertencem a J .<br />
L = {( i,<br />
j)<br />
∈ J,<br />
i ≥ j}<br />
, L ⊂ J<br />
(3.81)<br />
A variável nti representa o número de pares que estão contidas no conjunto L .<br />
O vetor b , de dimensão nti , é a solução do problema, pois nele estão<br />
armazenados os elementos de B k+<br />
1 , cujos pares ( i , j)<br />
pertencem a L .<br />
A matriz Z , de dimensões n× n , é descrita em (3.82)<br />
Z = S Y + Y S<br />
(3.82)<br />
k<br />
t<br />
k<br />
k<br />
37<br />
t<br />
k<br />
O vetor w , de dimensão nti , é montado a partir da matriz Z da seguinte forma:<br />
onde r = 1,...,<br />
nti .<br />
w<br />
r<br />
= ( Z<br />
w = ( Z ),<br />
r<br />
ij<br />
ii<br />
+ Z<br />
ji<br />
),<br />
∀(<br />
i,<br />
j)<br />
∈ L<br />
∀(<br />
i,<br />
i)<br />
∈ L<br />
(3.83)<br />
A maneira de obter as matrizes E , de dimensões n× n e que servirão para a<br />
montagem da matriz P , é descrita em (3.84). Para cada par ( i, j)<br />
∈ J , há uma matriz<br />
E ij que possui elemento de valor 1 na posição<br />
( i, j)<br />
e zero nas demais posições.<br />
⎧ 1 , ( i,<br />
j)<br />
∈ J<br />
Eij = ⎨<br />
(3.84)<br />
⎩ 0,<br />
caso contrário<br />
A matriz P , de ordem n × nti<br />
2<br />
, é montada por colunas da seguinte forma:
entre a matriz<br />
vec ( E<br />
ij<br />
vec ( E ),<br />
ii<br />
+ E<br />
ji<br />
),<br />
∀(<br />
i,<br />
j)<br />
∈ L<br />
∀(<br />
i,<br />
i)<br />
∈ L<br />
38<br />
(3.85)<br />
Finalmente, a matriz K é formada a partir da soma dos produtos de Kronecker<br />
S e a matriz identidade Ι . Esse produto está representado em (3.86).<br />
t<br />
k Sk<br />
t<br />
t<br />
K = ( S S ⊗ Ι)<br />
+ ( Ι ⊗ S S )<br />
(3.86)<br />
k<br />
k<br />
O produto de Kronecker, também conhecido como produto direto ou produto<br />
tensor, é definido em (3.87). Por exemplo, A é uma matriz n× p e C uma matriz<br />
m× q , então o produto de Kronecker de A e C será:<br />
⎡a11C<br />
⎢<br />
⎢<br />
a21C<br />
A⊗<br />
C =<br />
⎢ M<br />
⎢<br />
⎢⎣<br />
an1C<br />
a<br />
a<br />
a<br />
12<br />
22<br />
M<br />
n2<br />
C<br />
C<br />
C<br />
L<br />
L<br />
M<br />
L<br />
k<br />
k<br />
a1<br />
pC<br />
⎤<br />
a<br />
⎥<br />
2 pC<br />
⎥<br />
M ⎥<br />
⎥<br />
anpC<br />
⎥⎦<br />
(3.87)<br />
Ao resolver o sistema (3.80), de posse dos valores do vetor b efetua-se a<br />
montagem da matriz B 1 .<br />
k+<br />
Essa atualização não exige o armazenamento da matriz B k em cada iteração para<br />
obter a matriz B 1 , uma vez que as informações das iterações anteriores contidas nos<br />
k+<br />
vetores S e Y são suficientes.<br />
O fato de ter que resolver um sistema para se obter a nova matriz B 1 pode ser<br />
considerado uma desvantagem desse método, pois a dimensão desse sistema é igual ao<br />
número de não zeros ( nti ) contidos na parte triangular inferior da Hessiana que<br />
forneceu o padrão de esparsidade.<br />
No entanto, a grande desvantagem está no fato de que essa atualização não<br />
garante aproximações definidas positivas [14]. Outra desvantagem está no fato de que o<br />
método não apresenta bons resultados na resolução de problemas de grande porte [35].<br />
k+
4.1 – Introdução<br />
39<br />
CAPÍTULO 4<br />
Técnica de Atualização<br />
Quase-Newton Diagonal<br />
No capítulo anterior apresentaram-se algumas técnicas para a obtenção de<br />
matrizes Quase-Newton em problemas grandes. Dentre essas técnicas está a atualização<br />
esparsa, que serviu de inspiração para a concepção de uma técnica nova, a qual<br />
chamaremos de Técnica de Atualização Quase-Newton Diagonal.<br />
Os objetivos dessa nova técnica são:<br />
- Obter uma atualização que gere matrizes definidas positivas;<br />
- Evitar o armazenamento da matriz B a cada iteração;<br />
- Aumentar a esparsidade dos sistemas usados na resolução de problemas de<br />
otimização, reduzindo o custo computacional em problemas de grande porte.<br />
4.2 – Técnica de Atualização Diagonal<br />
Modificando algumas restrições em relação à proposta de Fletcher descrito em<br />
(3.77) no capítulo anterior, temos um novo problema descrito em (4.1), onde B k 1 é a<br />
solução do problema quadrático<br />
+
Onde:<br />
minimize<br />
e<br />
Bk + 1<br />
sujeito a<br />
2<br />
B<br />
⎫<br />
k+<br />
1S<br />
k −Yk<br />
F<br />
⎪<br />
( Bk+<br />
1)<br />
ii > δ , δ > 0, i = 1,...,<br />
n⎬<br />
(4.1)<br />
( B = ∀ ≠<br />
⎪<br />
k+<br />
1)<br />
ij 0 i j<br />
⎪<br />
⎭<br />
⋅ representa a norma de Frobenius;<br />
F<br />
as matrizes S k e Y k contém os q diferentes pares s i e y i , i = 1,...,<br />
q e em<br />
cada iteração elas são atualizadas de forma semelhante ao Método de<br />
Memória Limitada.<br />
S = s − + ,..., s ]<br />
(4.2)<br />
k<br />
[ k q 1 k<br />
Y k = [ yk<br />
−q+<br />
1,..., yk<br />
]<br />
(4.3)<br />
os vetores y k e s k são y k = ∇ xl(<br />
xk<br />
, λk , µ k ) − ∇ xl(<br />
xk<br />
−1,<br />
λk<br />
, µ k ) e<br />
s , onde l é o lagrangeano da função objetivo em problemas com<br />
k = xk<br />
− xk<br />
−1<br />
restrições.<br />
n representa a dimensão de k+<br />
1<br />
B .<br />
A seguir apresentaremos a nova técnica de atualização esparsa. Sejam as<br />
matrizes B, S e Y descritas em (4.7), (4,8) e (4.9), respectivamente.<br />
Seja B uma matriz diagonal n x n.<br />
⎡v1<br />
⎢<br />
⎢<br />
0<br />
B =<br />
⎢ M<br />
⎢<br />
⎣ 0<br />
0<br />
v<br />
2<br />
L<br />
O<br />
L<br />
As matrizes S e Y armazenam q pares de vetores s e y, respectivamente.<br />
40<br />
0 ⎤<br />
⎥<br />
M<br />
vn<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
(4.7)
⎡s<br />
⎢<br />
S = ⎢ M<br />
⎢<br />
⎣sn<br />
11<br />
1<br />
⎡ y<br />
⎢<br />
Y = ⎢ M<br />
⎢<br />
⎣y<br />
n<br />
11<br />
1<br />
L<br />
O<br />
L<br />
L<br />
O<br />
L<br />
s1q<br />
⎤<br />
⎥<br />
M ⎥<br />
s ⎥<br />
nq ⎦<br />
y ⎤ 1q<br />
⎥<br />
M ⎥<br />
y ⎥<br />
nq ⎦<br />
A função que será minimizada é a seguinte:<br />
2<br />
F<br />
41<br />
(4.8)<br />
(4.9)<br />
Φ = BS −Y<br />
(4.10)<br />
Substituindo (4.7), (4.8) e (4.9) em (4.10) temos:<br />
Φ =<br />
⎡v1<br />
⎢<br />
⎢<br />
⎢⎣<br />
0<br />
0 ⎤ ⎡s11<br />
L s1q<br />
⎤ ⎡ y11<br />
L y1q<br />
⎤<br />
⎢ ⎥ ⎢<br />
⎥<br />
O<br />
⎥<br />
⎥ ⎢ M O M ⎥ − ⎢ M O M ⎥<br />
(4.11)<br />
v ⎥ ⎢<br />
n ⎦ sn1<br />
s ⎥ ⎢<br />
nq yn1<br />
y ⎥<br />
⎣ L ⎦ ⎣ L nq ⎦<br />
Realizando a multiplicação seguida da subtração das matrizes em (4.11) temos:<br />
Φ =<br />
⎡v<br />
s<br />
⎢<br />
⎢<br />
⎢<br />
⎣v<br />
s<br />
1 11<br />
n n1<br />
− y<br />
M<br />
− y<br />
11<br />
n1<br />
L<br />
O<br />
L<br />
v s<br />
v<br />
1 1q<br />
n<br />
s<br />
nq<br />
− y<br />
M<br />
− y<br />
A norma de Frobenius da matriz em (4.12) será, então:<br />
Φ =<br />
( v s<br />
1 11<br />
+ ( v s<br />
M<br />
1 1n<br />
− y<br />
− y<br />
11<br />
1n<br />
)<br />
)<br />
2<br />
2<br />
+<br />
+<br />
L + ( v s<br />
n n1<br />
n<br />
M<br />
L + ( v s<br />
nq<br />
1q<br />
nq<br />
⎤<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
− y<br />
− y<br />
n1<br />
nq<br />
)<br />
)<br />
2<br />
2<br />
2<br />
F<br />
+<br />
2<br />
F<br />
(4.12)<br />
(4.13)
Logo:<br />
Φ =<br />
v<br />
+ v<br />
2 2<br />
1 11<br />
s<br />
s<br />
2 2<br />
1 1q<br />
− 2v<br />
s<br />
1 11<br />
M<br />
− 2v<br />
s<br />
1 1q<br />
y<br />
y<br />
11<br />
1q<br />
+ y<br />
+ y<br />
2<br />
11<br />
2<br />
1q<br />
+<br />
+<br />
L<br />
L<br />
+ v<br />
+ v<br />
42<br />
s<br />
2 2<br />
n n1<br />
s<br />
2 2<br />
n nq<br />
− 2vns<br />
M<br />
− 2v<br />
s<br />
n<br />
n1<br />
nq<br />
y<br />
n1<br />
y<br />
nq<br />
+ y<br />
2<br />
n1<br />
+ y<br />
Sob a forma matricial, a equação (4.14) é reescrita em (4.15):<br />
Φ =<br />
+<br />
− 2<br />
− 2<br />
+<br />
[ v L v ]<br />
[ v L v ]<br />
1<br />
1<br />
[ v L v ]<br />
1<br />
[ v L v ]<br />
1<br />
0 ⎤ ⎡s<br />
⎥ ⎢<br />
⎥ ⎢<br />
s ⎥ ⎢ n1⎦<br />
⎣ 0<br />
0 ⎤ ⎡s1q<br />
⎥ ⎢<br />
⎥ ⎢<br />
s ⎥ ⎢<br />
nq ⎦ ⎣ 0<br />
O<br />
0 ⎤ ⎡ y11⎤<br />
⎥ ⎢ ⎥<br />
⎥ ⎢<br />
M<br />
⎥<br />
s ⎥ ⎢ ⎥<br />
n1⎦<br />
⎣y<br />
n1⎦<br />
−<br />
0 1 ⎤<br />
⎥<br />
⎢ ⎥<br />
⎢ ⎥ 1 ⎦<br />
⎢<br />
⎤ ⎡v<br />
⎥<br />
⎥<br />
M<br />
s ⎥ n ⎦ ⎣vn<br />
0 ⎤ ⎡v1<br />
⎤<br />
⎥ ⎢ ⎥<br />
⎥ ⎢<br />
M<br />
⎥<br />
s ⎥<br />
⎦<br />
⎢⎣<br />
⎥<br />
nq vn<br />
⎦<br />
11<br />
[ y L y ] ⎢<br />
M<br />
⎥<br />
+ L + [ y L y ]<br />
11<br />
n<br />
n<br />
n<br />
n<br />
⎡s11<br />
⎢<br />
⎢<br />
⎢⎣<br />
0<br />
⎡s1q<br />
⎢<br />
⎢<br />
⎢<br />
⎣ 0<br />
⎡s11<br />
⎢<br />
⎢<br />
⎢⎣<br />
0<br />
⎡s1q<br />
⎢<br />
⎢<br />
⎢<br />
⎣ 0<br />
⎡ y<br />
⎢<br />
⎢⎣<br />
y<br />
n1<br />
n1<br />
O<br />
O<br />
O<br />
O<br />
⎤<br />
⎥<br />
⎥⎦<br />
11<br />
0 ⎤ ⎡ y1q<br />
⎤<br />
⎥ ⎢ ⎥<br />
⎥ ⎢ M ⎥<br />
s ⎥ ⎢ ⎥<br />
nq ⎦ ⎣y<br />
nq ⎦<br />
1q<br />
O<br />
L<br />
nq<br />
+<br />
⎡ y1q<br />
⎤<br />
⎢ ⎥<br />
⎢ M ⎥<br />
⎢ ⎥<br />
⎣y<br />
nq ⎦<br />
Se considerarmos o vetor v, as matrizes D j e os vetores j<br />
poderemos reescrever a equação (4.15):<br />
⎡v1<br />
⎤<br />
v =<br />
⎢ ⎥<br />
⎢<br />
M<br />
⎥<br />
⎢⎣<br />
v ⎥ n ⎦<br />
2<br />
nq<br />
+<br />
L<br />
(4.14)<br />
(4.15)<br />
Y , onde j = 1,...,<br />
q ,<br />
(4.16)
⎡s1<br />
j<br />
⎢<br />
D = ⎢<br />
⎢<br />
⎣ 0<br />
43<br />
0 ⎤<br />
⎥<br />
⎥<br />
s ⎥<br />
nj ⎦<br />
j O (4.17)<br />
⎡y<br />
⎤ 1 j<br />
⎢ ⎥<br />
Y = ⎢ M ⎥<br />
⎢ ⎥<br />
⎣ yqj<br />
⎦<br />
j (4.18)<br />
Reescrevendo (4.15) considerando (4.16), (4.17) e (4.18), então:<br />
Φ =<br />
T<br />
T<br />
v D D v + L + v D D v<br />
1<br />
Y<br />
1<br />
T<br />
1<br />
1<br />
T<br />
T<br />
− 2 v D Y − L − 2 v D Y<br />
+<br />
Y<br />
1<br />
1<br />
+ L +<br />
Y<br />
T<br />
q<br />
Y<br />
q<br />
q<br />
q<br />
q<br />
q<br />
(4.19)<br />
Se considerarmos agora a matriz Q , o vetor b e o escalar c, descritos em (4.20),<br />
(4.21) e (4.22), respectivamente, podemos reescrever (4.19).<br />
q<br />
∑<br />
j=<br />
1<br />
2<br />
Q = 2 × D<br />
(4.20)<br />
q<br />
∑<br />
j=<br />
1<br />
j<br />
b = 2 × D jY j<br />
(4.21)<br />
= c<br />
q<br />
∑<br />
j=<br />
1<br />
Y<br />
t<br />
j j Y<br />
Por fim, reescrevendo (4.19), obtemos a seguinte função quadrática:<br />
(4.22)<br />
T<br />
T<br />
Φ ( v)<br />
= 0.5 v Qv − v b + c<br />
(4.23)
Podemos afirmar que o problema (4.1) é equivalente ao de minimizar uma<br />
função quadrática, como a que temos apresentada na equação (4.23), com restrições na<br />
variável v , onde v ≥ δ , δ > 0 e i = 1,...,<br />
n .<br />
onde<br />
i<br />
Então, podemos reescrever o problema (4.1) da seguinte maneira:<br />
minimize<br />
v<br />
sujeito a<br />
t t<br />
Φ(<br />
v)<br />
= 0.<br />
5 v Qv − v b + c⎪⎫<br />
⎬<br />
vi<br />
≥ δ > 0 i = 1,...,<br />
n ⎪⎭<br />
a nova matriz atualizada é diagonal, onde = v i = 1,...,<br />
n ;<br />
44<br />
Bii i<br />
(4.24)<br />
n representa a dimensão de B , isto é, o número de variáveis do problema<br />
original .<br />
δ é uma constante;<br />
a matriz Q<br />
onde D j uma matriz diagonal:<br />
o vetor b<br />
D<br />
j<br />
m<br />
∑<br />
j=<br />
1<br />
2<br />
Q = 2 × D<br />
(4.25)<br />
⎡S1<br />
⎢<br />
= ⎢<br />
⎢ M<br />
⎢<br />
⎢⎣<br />
0<br />
j<br />
S<br />
2 j<br />
m<br />
∑<br />
j=<br />
1<br />
j<br />
L<br />
O<br />
L<br />
0 ⎤<br />
⎥<br />
⎥<br />
M ⎥<br />
⎥<br />
Snj<br />
⎥⎦<br />
(4.26)<br />
= × D b 2 (4.27)<br />
j j Y
onde Y j é o seguinte vetor:<br />
o vetor c<br />
nas matrizes<br />
Y<br />
j<br />
c =<br />
⎡ y1<br />
j ⎤<br />
⎢ ⎥<br />
⎢<br />
y2<br />
j<br />
= ⎥<br />
⎢ M ⎥<br />
⎢ ⎥<br />
⎢⎣<br />
ynj<br />
⎥⎦<br />
m<br />
∑<br />
j=<br />
1<br />
Y<br />
t<br />
j Y j<br />
Sendo j = 1,...,<br />
q , onde q é o número de pares de vetores<br />
k<br />
S e<br />
dimensão n× q .<br />
45<br />
k<br />
s e<br />
(4.28)<br />
(4.29)<br />
k<br />
y armazenados<br />
k<br />
Y respectivamente descritas em (4.2) e (4.3), onde ambas possuem<br />
As matrizes k<br />
S e k<br />
Y são atualizadas de modo semelhante ao Método de<br />
Memória Limitada, onde são armazenados os vetores k<br />
s e k<br />
y , sendo calculados da<br />
seguinte forma (nos problemas com restrições):<br />
k k k−1<br />
s = x − x e<br />
k<br />
k k k<br />
k−1<br />
k k<br />
y = ∇ l(<br />
x , λ , µ ) − ∇ l(<br />
x , λ , µ ) , onde l é o lagrangeano da função objetivo.<br />
x<br />
4.3 – Resolução do Problema<br />
x<br />
Para a resolução do problema através das condições de otimalidade de KKT é<br />
necessário ter o gradiente da função objetivo e o gradiente das restrições.<br />
O gradiente da função Φ (v)<br />
é obtido facilmente:<br />
∇ Φ(<br />
v ) = Qv − b<br />
(4.30)<br />
Para obtenção do gradiente das restrições, temos que:
então<br />
∂g<br />
onde ∇ gi<br />
= , i = 1,...,<br />
n .<br />
∂v<br />
i<br />
g = δ − v<br />
i<br />
∇ vk<br />
) = 1<br />
O gradiente das restrições será:<br />
i<br />
, i = 1,<br />
... , n<br />
(4.31)<br />
[ ∇g<br />
⋅⋅⋅<br />
g ]<br />
g( ∇<br />
(4.32)<br />
46<br />
n<br />
⎡−1⎤<br />
⎡ 0 ⎤<br />
⎢ ⎥<br />
⎢ ⎥<br />
⎢<br />
0<br />
⎥ ∇ = ⎢<br />
0<br />
∇g<br />
⎥<br />
1 = , L , gn<br />
(4.33)<br />
⎢ M ⎥<br />
⎢ M ⎥<br />
⎢ ⎥<br />
⎢ ⎥<br />
⎣ 0 ⎦<br />
⎣−1⎦<br />
∇ g( vk<br />
) = -I<br />
(4.34)<br />
A partir das condições de otimalidade de Karush-Kuhn-Tucker para o problema<br />
(4.24) temos as equações (4.35) e (4.36)<br />
n<br />
Φ(<br />
v ) + λ ∇g<br />
= 0<br />
(4.35)<br />
∇ k ∑<br />
i=<br />
1<br />
Considerando a equação (4.35) temos:<br />
i<br />
i<br />
T<br />
g ( v ) λ = 0<br />
(4.36)<br />
k<br />
i<br />
Q v b − λ = 0 , i = 1,<br />
... , n<br />
(4.37)<br />
ii i − i i<br />
A partir da equação (4.36) temos:
( δ - v ) λ = 0 , i = 1,<br />
... , n<br />
(4.38)<br />
i<br />
i<br />
Através da análise das informações de (4.37) e (4.38), podemos considerar as<br />
seguintes situações:<br />
1) Se λ = 0,<br />
então<br />
2) Se λ > 0<br />
i<br />
i<br />
Q v b = 0 , i = 1,<br />
... , n<br />
(4.39)<br />
ii i − i<br />
v =<br />
b<br />
i<br />
i<br />
Qii<br />
vi<br />
= δ<br />
, i = 1,<br />
... , n<br />
(4.40)<br />
, i = 1,<br />
... , n<br />
(4.41)<br />
Portanto, o vetor solução do problema (4.24) pode ser obtido a partir da equação<br />
(4.40) considerando-se v > δ . Caso contrário, se v ≤ δ faz-se v = δ .<br />
i<br />
47<br />
i<br />
i
5.1 – Introdução<br />
48<br />
CAPÍTULO 5<br />
Métodos Diretos para Solução de<br />
Sistemas Lineares Esparsos<br />
No presente capítulo são abordados alguns conceitos sobre Métodos Diretos e<br />
como eles podem ser utilizados em situações nas quais o problema é considerado<br />
esparso.<br />
Descreve-se de maneira sucinta, como as rotinas MA27, MA28 e SSTSTRF/S<br />
utilizam o conhecimento da esparsidade para obter a solução, através do Método Direto,<br />
em sistemas simétricos e não simétricos. A MA27 e a MA28 são utilizadas em<br />
computadores seqüenciais. A SSTSTRF/S é parte da biblioteca de rotinas disponíveis<br />
no computador CRAY SV1 e permite o uso de processamento em paralelo.<br />
No entanto, o Método de Memória Limitada junto ao FAIPA efetua a resolução<br />
de sistemas lineares densos, o que torna inviável o uso de solvers específicos para<br />
sistemas esparsos. Por isso fez-se a implementação da rotina SGETRF/S que resolve<br />
sistemas densos pelo método direto e pertencente ao LAPACK. Além disso, essa rotina<br />
poderia ser utilizada tanto em computadores seqüenciais como em ambiente de alto<br />
desempenho com o computador CRAY SV1.
5.2 – Método Direto<br />
Consideremos o sistema<br />
Ax = c<br />
(5.1)<br />
em que A é uma matriz quadrada de dimensão n não singular,<br />
49<br />
n<br />
x ∈ R é a variável do<br />
n<br />
problema e b∈ R .<br />
Métodos Diretos usam uma fatoração dos coeficientes da matriz A para facilitar<br />
a obtenção da solução de sistemas do tipo (5.1).<br />
A fatoração mais comum para sistemas não simétricos é a do tipo LU , onde a<br />
matriz A (ou uma permutação dela) é expressa como o produto das matrizes L e U ,<br />
onde L é triangular inferior e U é triangular superior.<br />
Desse modo, podemos ter:<br />
PAQ = LU<br />
(5.2)<br />
onde P e Q são matrizes de permutação obtidas de tal forma a manter a estabilidade<br />
numérica.<br />
Após a fatoração, a solução pode ser apresentada de uma maneira sucinta<br />
observando duas etapas principais: uma substituição direta (5.3) e outra de substituição<br />
inversa (5.4).<br />
Ly = Pc<br />
(5.3)<br />
Uz = y<br />
(5.4)<br />
A solução x é obtida em (5.5) realizando-se a permutação de z .<br />
x = Qz<br />
(5.5)<br />
O uso dessa fatoração LU para resolver sistemas de equações é usualmente<br />
chamada de Eliminação Gaussiana.
Se a matriz A é simétrica positiva definida, é normal usar uma fatoração (5.6)<br />
conhecida como Fatoração de Cholesky.<br />
t t<br />
PAP = LL<br />
(5.6)<br />
Para o caso de matrizes simétricas em geral é usada a fatoração (5.7).<br />
t<br />
t<br />
PAP = LDL<br />
(5.7)<br />
Se em (5.7) a matriz A é indefinida, para que a decomposição seja estável, é<br />
preciso que a matriz D seja diagonal com blocos, onde cada bloco possui ordem 1 ou 2,<br />
e L é triangular inferior unitária [15].<br />
5.3 – Método Direto para Sistemas Esparsos<br />
A utilização da esparsidade no intuito de viabilizar a resolução de sistemas com<br />
grande número de variáveis requer o aumento dos cuidados no momento da<br />
manipulação dos elementos da matriz desse sistema [7]. Dentre esses cuidados podemos<br />
citar alguns destaques:<br />
Controle do número de elementos nulos que passam a ser não nulos após a<br />
fatoração (Ordenamento).<br />
Predição da localização dos elementos não nulos e também daqueles elementos<br />
nulos que poderão vir a ser não nulos (Fatoração Simbólica).<br />
Esquema de armazenamento que faz uso somente dos elementos não nulos.<br />
Manipular, durante a fatoração, apenas os elementos não nulos.<br />
O processo da Eliminação Gaussiana quando utilizado em sistemas esparsos<br />
pode provocar a perda do padrão de esparsidade, isto é, permitir a inserção de elementos<br />
não nulos em posições antes ocupadas por elementos nulos [29]. Um exemplo clássico é<br />
o das matrizes apresentadas em (5.9) e (5.11) onde o ordenamento das linhas e das<br />
50
colunas é extremamente efetivo para a manutenção da esparsidade da matriz durante a<br />
Eliminação Gaussiana [9].<br />
Considerando:<br />
A = LU<br />
(5.8)<br />
Se o padrão de esparsidade da matriz A for considerada como em (5.9)<br />
⎡×<br />
× × × ⎤<br />
⎢ ⎥<br />
⎢<br />
× ×<br />
A =<br />
⎥<br />
(5.9)<br />
⎢×<br />
× ⎥<br />
⎢ ⎥<br />
⎣×<br />
× ⎦<br />
então, após a fatoração, a matriz que contém LU terá o padrão de esparsidade alterado<br />
como em (5.10). Os símbolos ⊗ representam os não nulos inseridos no lugar de<br />
elementos nulos no padrão original.<br />
⎡×<br />
× × × ⎤<br />
⎢<br />
⎥<br />
⎢<br />
× × ⊗ ⊗<br />
LU =<br />
⎥<br />
(5.10)<br />
⎢×<br />
⊗ × ⊗⎥<br />
⎢<br />
⎥<br />
⎣×<br />
⊗ ⊗ × ⎦<br />
No entanto, se for feito um reordenamento de linhas e colunas de tal forma que a<br />
matriz reordenada passe a ter o padrão apresentado em (5.11) a fatoração preservará o<br />
padrão de esparsidade de tal forma que não haverá inserção de elementos não nulos<br />
como em (5.10).<br />
⎡×<br />
× ⎤<br />
⎢ ⎥<br />
⎢<br />
× ×<br />
A =<br />
⎥<br />
(5.11)<br />
⎢ × × ⎥<br />
⎢ ⎥<br />
⎣×<br />
× × × ⎦<br />
51
⎡×<br />
× ⎤<br />
⎢ ⎥<br />
⎢<br />
× ×<br />
LU =<br />
⎥<br />
(5.12)<br />
⎢ × × ⎥<br />
⎢ ⎥<br />
⎣×<br />
× × × ⎦<br />
A etapa de Fatoração Simbólica consiste em determinar a localização dos não<br />
nulos em L e U , além de preparar a estrutura de dados para armazenagem e alocação<br />
de memória para esses não nulos.<br />
A Fatoração Numérica utiliza os valores numéricos dos elementos e realiza a<br />
fatoração LU com pivoteamento que garanta a estabilidade numérica do processo.<br />
Para matrizes simétricas definidas positivas, na etapa de Ordenamento utiliza-se<br />
o algoritmo de Grau Mínimo. Para matrizes não simétricas ou simétricas indefinidas é<br />
comum utilizar-se o Critério de Markovitz.<br />
O algoritmo de Grau Mínimo escolhe o elemento i da diagonal de tal forma que<br />
o número de não zeros na linha e coluna i é minimizado.<br />
O Critério de Markowitz escolhe o elemento k<br />
a ij (k indica a iteração) de tal<br />
forma a minimizar a expressão (5.13), na qual temos<br />
zeros na linha i e<br />
52<br />
k<br />
r i representando o número de não<br />
k<br />
c j representando o número de não zeros na coluna j .<br />
k<br />
k<br />
min( r −1)<br />
min( c −1)<br />
(5.13)<br />
i<br />
Além disso, o Critério de Markowitz exige um controle da estabilidade<br />
numérica, chamada Escolha Limite de Pivô que consiste em aceitar para pivô da<br />
iteração k qualquer elemento k<br />
a ij que satisfaça o critério descrito pela desigualdade<br />
(5.14), onde u ( 0 < u ≤1<br />
) é o parâmetro limite [7].<br />
k<br />
kk<br />
k<br />
ik<br />
j<br />
a ≥ u a<br />
(5.14)<br />
Na prática, o valor u = 0.<br />
1 e considerado satisfatório e dá bastante liberdade<br />
para se escolher o pivô em termos da esparsidade da matriz [7].<br />
Em linhas gerais, a solução de (5.1) pode ser dividida em quatro fases [15]:
1) Fase de Pré-Ordenamento: que explora a estrutura;<br />
2) Fase de Análise: onde a estrutura da matriz é analisada para produzir um<br />
ordenamento e uma estrutura de dados satisfatórios para uma fatoração eficiente. Nessa<br />
etapa é determinada a seqüência de pivoteamento. Muitas vezes referem-se a essa fase<br />
com Fatoração Simbólica ou também de Ordenamento;<br />
3) Fase de Fatoração: onde é efetuada a fatoração numérica, isto é, são<br />
computados os fatores, baseada na seqüência de pivoteamento definida na fase de<br />
Análise;<br />
4) Fase de Solução: onde os fatores são usados para resolver o sistema através de<br />
substituição direta e seguida de uma substituição inversa.<br />
Quando o sistema (5.1) é simétrico, as Fases 2 e 3 terão comportamentos<br />
diferenciados para os casos em que a matriz A é definida positiva ou indefinida.<br />
Para matrizes simétricas definidas positivas, a seqüência de pivoteamento pode<br />
ser obtida usando somente o padrão de esparsidade, isto é, durante a fase de análise não<br />
há manipulação computacional de números reais e na fase de fatoração a seqüência de<br />
pivoteamento pode ser usada sem modificações.<br />
Em problemas onde a matriz é simétrica indefinida, é possível alterar a<br />
seqüência de pivoteamento, caso seja necessário durante a fatoração, para manter a<br />
estabilidade numérica. Isso quer dizer que as Fase 2 e 3 são realizadas conjuntamente,<br />
podendo ser consideradas uma fase só.<br />
Se o sistema for não simétrico as Fase 2 e 3 são realizadas conjuntamente, e<br />
também podem ser consideradas uma fase só.<br />
Há rotinas que utilizam o Método Direto onde a Fase 4 permite resolver<br />
repetidamente várias vezes o sistema para diferentes vetores c , obtendo dessa forma<br />
uma maior eficiência computacional.<br />
A Fase 3 (ou uma combinação das Fases 2 e 3) normalmente requer mais tempo<br />
computacional. A fase mais rápida é a Fase 4. Em sistemas densos, a Fase 1 não é<br />
utilizada [15].<br />
Dentre os Métodos Diretos para sistemas esparsos podemos destacar o Método<br />
Multifrontal, que é uma generalização do Método Frontal, pois faz uso de múltiplas<br />
53
matrizes frontais. O método foi implementado por Duff e Reid em 1982 e representa um<br />
avanço significativo na solução direta de sistemas esparsos [6].<br />
O Método Frontal tem suas origens na solução de problemas de análise<br />
estrutural através do Método dos Elementos Finitos. Inicialmente considerava sistemas<br />
simétricos definidos positivos e posteriormente foi estendido para sistemas não<br />
simétricos [6].<br />
O Método Multifrontal pode ser usado tanto em sistemas indefinidos não<br />
simétricos como também em sistemas indefinidos simétricos. Além disso, o método<br />
aplica-se também em sistemas com matrizes que são simétricas quanto a sua estrutura,<br />
mas não quanto aos seus valores [6].<br />
5.4 – Esquemas de Armazenamento de Matrizes Esparsas<br />
Existe uma grande variedade de tipos de armazenamento de matrizes esparsas<br />
dentre os quais podemos citar:<br />
- Esquema Coordenado<br />
- Esquema CSC (Compressed Sparse Column)<br />
O Esquema Coordenado tem como característica apresentar dois tipos de<br />
armazenagem: uma Parte Primária e uma Parte Secundária. A Parte Primária é<br />
constituída por um vetor de reais contendo todos os elementos não nulos da matriz (que<br />
chamaremos de AC). A Parte Secundária corresponde a dois vetores de inteiros que<br />
contém os índices de linha (IRN) e de coluna (ICN) dos elementos não nulos.<br />
Quando comparado com outros esquemas, o coordenado necessita de um espaço<br />
de armazenagem relativamente elevado e, além disso, operações com matrizes esparsas<br />
não são implementadas de uma forma eficiente usando este esquema. Por essa razão o<br />
Esquema Coordenado é habitualmente usado apenas como input/output entre rotinas de<br />
manipulação de matrizes esparsas e o usuário.<br />
54
O Esquema Coordenado é o tipo de armazenagem usado como interface das<br />
rotinas MA28 e MA27 para resolução de sistemas de equações lineares com matrizes<br />
esparsas [21].<br />
O Esquema CSC (Compressed Sparse Column) armazena as informações da<br />
matriz também em três vetores que chamaremos de AMAT, ROWIND e COLSTR.<br />
O vetor AMAT armazena os elementos diferentes de zero da matriz. O vetor<br />
ROWIND contém os índices da coluna de cada elemento armazenado no vetor AMAT.<br />
O vetor COLSTR contém informações referentes ao número de elementos diferentes de<br />
zero contidos em cada coluna da matriz que se deseja armazenar.<br />
Por exemplo, seja uma matriz A de dimensões n x n, com nz elementos<br />
diferentes de zero.<br />
Os vetores AMAT e ROWIND terão dimensão nz. O vetor COLSTR terá<br />
dimensão n+1.<br />
Para entender o armazenamento das informações contidas em COLSTR vamos<br />
considerar o valor da posição i nesse vetor e seja nzci o número de não zeros da coluna<br />
i-1 da matriz A. Então o valor na posição i do vetor COLSTR será (nzci+1).<br />
Convenciona-se que sempre a primeira posição desse vetor será igual a 1 e a última<br />
posição tenha o valor nz+1.<br />
O Esquema CSC é muito usado por muitos solvers esparsos [4], dentre os quais<br />
está o SSTSTRF/S disponível no computador CRAY SV1.<br />
O Esquema CSC, em relação ao Coordenado, geralmente necessita um espaço<br />
menor para o armazenamento das informações de uma mesma matriz não simétrica de<br />
dimensões n x n .<br />
Por exemplo, se considerarmos nz o número de elementos diferentes de zero<br />
dessa matriz, os vetores AMAT e ROWIND teriam dimensão nz e o terceiro vetor<br />
(COLSTR) apresentaria dimensão n+1. Enquanto isso, no Esquema Coordenado todos<br />
os vetores teriam dimensão nz.<br />
55
Seja, por exemplo, a seguinte matriz:<br />
⎡ a<br />
⎢<br />
⎢<br />
0<br />
A =<br />
⎢ 0<br />
⎢<br />
⎣e2<br />
0<br />
b<br />
f<br />
g<br />
2<br />
2<br />
0<br />
f<br />
1<br />
c<br />
0<br />
56<br />
e1<br />
⎤<br />
g<br />
⎥<br />
1⎥<br />
0 ⎥<br />
⎥<br />
d ⎦<br />
(5.15)<br />
Se o armazenamento for feito através do Esquema Coordenado teremos os<br />
seguintes vetores: AC, IRN e ICN. O vetor AC contém os elementos da matriz que são<br />
diferentes de zero. Os vetores IRN e ICN contém os índices das linhas e das colunas,<br />
respectivamente, de cada um dos elementos diferentes de zero da matriz A.<br />
Então o esquema de armazenamento coordenado para a matriz não simétrica<br />
(5.15) será:<br />
1<br />
[ a b c d e f g e f g ]<br />
AC = (5.16)<br />
1<br />
1<br />
[ 1 2 3 4 1 2 2 4 3 4 ]<br />
1<br />
2<br />
IRN = (5.17)<br />
[ 1 2 3 4 4 3 4 1 2 2 ]<br />
ICN = (5.18)<br />
Se considerarmos a matriz descrita em (5.15) simétrica, isto é, e 1 = e2<br />
, f 1 = f 2 e<br />
g = g , então o esquema de armazenamento coordenado será o seguinte :<br />
2<br />
[ a b c d e f g ]<br />
AC = (5.19)<br />
[ 1 2 3 4 1 2 2 ]<br />
1<br />
1<br />
1<br />
IRN = (5.20)<br />
[ 1 2 3 4 4 3 4 ]<br />
ICN = (5.21)<br />
2<br />
2
Seja o armazenamento da matriz não simétrica (2.15) seguindo o Esquema CSC.<br />
Então teremos:<br />
[ a e b f g f c e g d]<br />
AMAT 2<br />
2 2 1 1 2<br />
5.5 – Rotina MA27 (HSL)<br />
= (5.22)<br />
[ 1 4 2 3 4 2 3 1 2 4 ]<br />
ROWIND = (5.23)<br />
[ 1 3 6 8 11 ]<br />
COLSTR = (5.24)<br />
A Harwell Subroutine Library (HSL) [21] apresenta uma coleção de rotinas<br />
escritas na linguagem Fortran para computação científica de grande porte. A rotina<br />
MA27, que integra essa coleção, resolve sistemas de equações lineares simétricos e<br />
esparsos do tipo:<br />
AX = RHS<br />
(5.25)<br />
onde:<br />
A é uma matriz quadrada de ordem n , esparsa, simétrica e não<br />
necessariamente definida.<br />
RHS matriz que contém os nrhs vetores c que compõem o lado direito.<br />
X é a matriz que contém as nrhs soluções.<br />
nrhs ≥1.<br />
A rotina MA27, desenvolvida a partir da MA17 e escrita na linguagem Fortran,<br />
foi implementada em 1982 por Duff e Reid, e foi o primeiro código a utilizar a técnica<br />
multifrontal. Em 1993 os mesmos autores da MA27 desenvolveram a MA47 também<br />
baseada no Método Multifrontal, porém a MA47 não apresentava um bom desempenho<br />
em determinadas situações. Por este motivo nunca foi considerada sucessora da MA27<br />
[18].<br />
57
Em 2000, Duff anuncia o desenvolvimento da MA57, a rotina sucessora da<br />
MA27. Dentre as atualizações dessa nova rotina podem ser citadas a utilização das<br />
rotinas BLAS Nível 3 (Basic Linear Álgebra Program) e o fim do uso de blocos<br />
COMMON da linguagem FORTRAN [18].<br />
Durante a fase de análise na MA27, os pivôs poderão ser selecionados<br />
considerando-se apenas o padrão de esparsidade caso a matriz seja definida positiva. Se<br />
a matriz for indefinida, a ordem de pivoteamento pode ser modificada durante a<br />
fatoração de tal forma que obedeça a um critério de estabilidade.<br />
Para a seleção da seqüência de pivoteamento que assegure a preservação da<br />
esparsidade é utilizado o algoritmo de grau mínimo.<br />
A MA27 permite que, após a realização das etapas de análise e de fatoração, a<br />
etapa de solução possa ser chamada repetidamente para resolver o sistema usando<br />
diferentes vetores c .<br />
Vejamos três esquemas possíveis para utilizar a MA27:<br />
1) Apenas um tipo de matriz A e somente um vetor b . Nesse caso para resolver<br />
o problema a rotina utiliza apenas uma etapa de análise (representado por An ), uma<br />
etapa de fatoração (representado por Ft ) e uma etapa de solução (representado por<br />
Sol ).<br />
Ax = c<br />
An | Ft | Sol<br />
(5.26)<br />
2) Diferentes matrizes A , porém apresentando o mesmo padrão de esparsidade.<br />
A rotina utiliza apenas uma etapa de análise ( An ), e sucessivas etapas de fatoração e<br />
solução.<br />
A x = c<br />
1<br />
2<br />
1<br />
2<br />
1<br />
A x = c<br />
A x = c<br />
3<br />
3<br />
2<br />
3<br />
An | Ft | Sol | Ft | Sol | Ft | Sol (5.27)<br />
58
3) Mesma matriz A e diferentes vetores b . Apenas uma etapa de análise, uma<br />
etapa de fatoração e sucessivas etapas de solução.<br />
Ax = c<br />
1<br />
2<br />
1<br />
Ax = c<br />
Ax = c<br />
3<br />
2<br />
3<br />
An | Ft | Sol | Sol | Sol (5.28)<br />
O sistema gerado pelo FAIPA e que é descrito no Capítulo 2, pode ser<br />
considerado simétrico. O esquema (5.28) será utilizado para a solução dos sistemas<br />
internos ao FAIPA.<br />
A implementação da rotina MA27 fez-se necessário para que o FAIPA pudesse<br />
resolver sistemas com um número elevado de variáveis com o aproveitamento da<br />
esparsidade.<br />
5.6 – Rotina MA28 (HSL)<br />
A MA28 integra também a coleção de rotinas escritas na linguagem Fortran para<br />
computação científica de grande porte da Harwell Subroutine Library (HSL) [21]. A<br />
rotina MA28 difere da MA27 no fato de ter sido desenvolvida para resolver sistemas de<br />
equações não lineares assimétricos e esparsos. Esses sistemas são do tipo:<br />
AX = RHS<br />
(5.29)<br />
Onde:<br />
A é uma matriz quadrada de ordem n , esparsa, não simétrica.<br />
RHS contém os nrhs vetores c que compõem o lado direito.<br />
X é a matriz que contém as nrhs soluções.<br />
nrhs ≥1.<br />
59
A MA28 também permite que, após a realização das etapas de análise e de<br />
fatoração, a etapa de solução possa ser chamada repetidamente para resolver o sistema<br />
usando diferentes vetores c .<br />
O sistema gerado pelo FAIPA, descrito no Capítulo 2, é originalmente<br />
assimétrico. O esquema (5.26) será utilizado para a solução dos sistemas internos ao<br />
FAIPA.<br />
A implementação da rotina MA28 fez-se necessário para que o FAIPA pudesse<br />
resolver sistemas não simétricos com um número elevado de variáveis com o<br />
aproveitamento da esparsidade.<br />
5.7 – Rotina SSTSTRF/S (CRAY SV1)<br />
Desenvolvida para o sistema operacional UNICOS (derivado do sistema<br />
operacional UNIX System V) do CRAY SV1, a rotina SSTSTRF/S é formada por duas<br />
subrotinas principais: a SSTSTRF e a SSTSTRS [4].<br />
Considerando o sistema descrito em (5.29), a rotina SSTSTRF/S realiza através<br />
do método direto a resolução dos sistemas considerando as matrizes esparsas com<br />
simetria de posição. Essa rotina apresenta, basicamente, quatro fases de execução [4]:<br />
1) Reordenamento;<br />
2) Fatoração Simbólica;<br />
3) Determinação da seqüência de execução dos nós e do armazenamento exigido<br />
para as matrizes frontais;<br />
4) Fatoração numérica.<br />
A rotina SSTSTRS resolve o sistema após a fatoração realizada pela SSTSTRF.<br />
Na etapa de solução é possível resolver o sistema utilizando diferentes vetores que<br />
compõem a matriz RHS , descrita em (5.29).<br />
A implementação dessa rotina foi realizada para um melhor desempenho do<br />
FAIPA em ambiente de alto desempenho, pois a SSTSTRF/S foi desenvolvida para<br />
aproveitar ao máximo o ambiente de computação paralela e vetorial do CRAY SV1.<br />
60
5.7 – Rotina SGETRF/S (LAPACK)<br />
As rotinas LAPACK estão escritas em linguagem Fortran77 e permitem resolver<br />
sistemas de equações lineares. Estão disponíveis rotinas para matrizes densas e de<br />
banda, porém não existem opções para matrizes esparsas [4].<br />
A rotina SGETRF/S é formada por duas subrotinas principais: a SGETRF e a<br />
SGETRS.<br />
Considerando o sistema:<br />
Onde:<br />
A é uma matriz densa quadrada de ordem n .<br />
AX = RHS<br />
(5.30)<br />
RHS contém os nrhs vetores c que compõem o lado direito.<br />
X é a matriz que contém as nrhs soluções.<br />
nrhs ≥1<br />
.<br />
Considerando o sistema descrito em (5.30), a rotina SGETRF realiza uma<br />
fatoração LU utilizando pivoteamento com permutação de linhas.<br />
A rotina SGETRS resolve o sistema após a fatoração realizada pela SGETRF.<br />
Nessa etapa é possível resolver o sistema utilizando diferentes vetores que compõem a<br />
matriz RHS .<br />
O fato de poder ser utilizada tanto em máquinas seqüenciais como em um<br />
computador de alto desempenho, como o CRAY SV1, tornou essa rotina muito mais<br />
interessante, pois permitiu um melhor desempenho do FAIPA, ao resolver sistemas<br />
densos, nos dois tipos de ambiente computacional.<br />
61
6.1 – Introdução<br />
62<br />
CAPÍTULO 6<br />
Resultados Numéricos<br />
No presente capítulo, inicialmente é descrita a ferramenta CUTEr utilizada para<br />
auxiliar na realização de testes numéricos com o FAIPA. Foram resolvidos alguns<br />
problemas sem restrições e com restrições que indicam a funcionalidade da interface<br />
CUTEr junto ao FAIPA.<br />
Em seguida é feita a apresentação do problema HS43_NF que também auxiliará<br />
na tarefa de realizar testes numéricos e foi escrito na linguagem FORTRAN 90.<br />
Na etapa seguinte, através do problema HS43_NF, realizaram-se testes para<br />
verificação do desempenho das rotinas MA27 e MA28 quando implementadas no<br />
FAIPA. Essas rotinas permitem a resolução de sistemas lineares esparsos de grande<br />
porte.<br />
Logo depois, estão os resultados da Nova Técnica de Atualização Quase-Newton<br />
Diagonal. Foram feitas comparações com as atualizações BFGS e de Memória<br />
Limitada. Mostraremos os gráficos com as iterações do FAIPA quando este usou cada<br />
uma das técnicas. Nessa etapa foram utilizados problemas de Hock e Schittkowski [28]<br />
escritos na Linguagem Matlab.<br />
Por fim, para a obtenção de resultados com problemas maiores através da<br />
interface CUTEr ou com o HS43_NF, utilizou-se um computador AMD Atlon 1800<br />
MHz com 1.5Gb de Memória RAM e, principalmente, o computador CRAY SV1 com<br />
12 processadores e 16Gb de memória RAM. O acesso ao computador CRAY SV1 foi
feito através do NACAD-COPPE/<strong>UFRJ</strong> (Núcleo de Atendimento em Computação de<br />
Alto Desempenho).<br />
6.2 – CUTEr<br />
O CUTEr (Constrained and Unconstrained Testing Environment revisited) [17]<br />
é uma ferramenta que auxilia no projeto e desenvolvimento de softwares em otimização.<br />
Para utilizar essa ferramenta são necessárias duas etapas: a decodificação e<br />
criação da interface.<br />
A plataforma de decodificação CUTEr é disponível para sistemas operacionais<br />
UNIX e LINUX. No presente trabalho utilizou-se o sistema operacional LINUX durante<br />
a etapa de decodificação.<br />
A interface é um conjunto de rotinas escritas em FORTRAN 77 e FORTRAN 90<br />
que devem ser adaptadas ao algoritmo de otimização para fornecer os dados referentes<br />
aos problemas testes.<br />
Os problemas testes disponíveis para a utilização na plataforma CUTEr durante<br />
a etapa de decodificação estão escritos na linguagem SIF (Standard Input Format). A<br />
plataforma CUTEr decodifica os arquivos SIF. O formato SIF é baseado na estrutura<br />
chamada Separabilidade Parcial em Grupo. Uma função é dita parcialmente separável<br />
em grupos se:<br />
variável α .<br />
1) Puder ser escrita sob a forma:<br />
ng<br />
∑<br />
i=<br />
1<br />
onde ng é o número de grupos.<br />
f<br />
( x)<br />
= g ( ( x)<br />
)<br />
2) Cada função de grupo ( α )<br />
i<br />
i<br />
α (6.1)<br />
i<br />
g for duas vezes continuamente diferenciável na<br />
63
3) A função<br />
( x)<br />
é conhecida como i-ésimo grupo.<br />
[ j]<br />
( x )<br />
t<br />
α i = ∑ωi , j y j + ai<br />
x − bi<br />
(6.2)<br />
j∈τ<br />
i<br />
4) Cada um dos índices τ i é um subconjunto de { 1,<br />
K , ne}<br />
, onde ne é o número<br />
de funções elemento não linear.<br />
5) Cada função elemento não linear y j for duas vezes continuamente<br />
diferenciável na variável<br />
[ j]<br />
x .<br />
t<br />
6) O gradiente a i de cada função elemento linear ai x − bi<br />
é, em geral, esparsa.<br />
7) Os ω i, j são conhecidos como peso.<br />
O decodificador do CUTEr é utilizado para realizar a conversão do arquivo,<br />
relativo a cada problema que está no formato SIF, para um conjunto de arquivos no<br />
formato de dados (.dat) e Fortran77 (.f).<br />
Uma interface entre o FAIPA e os arquivos gerados após a decodificação foi<br />
escrita para que os problemas disponíveis na biblioteca CUTEr pudessem ser<br />
otimizados.<br />
A interface consiste em dois conjuntos distintos de arquivos. Um dos conjuntos<br />
apresenta arquivos fixos, escritos na linguagem Fortran 77, que farão a manipulação dos<br />
dados relativos a cada problema de otimização com restrições ou sem restrições. O<br />
outro conjunto de arquivos será alterado para cada problema e depende do processo de<br />
decodificação. Neste último conjunto, além dos arquivos em Fortran 77 há também um<br />
arquivo dat que contém dados do problema, por exemplo, o ponto x inicial.<br />
64
Para problemas sem restrições os arquivos fixos utilizados são os seguintes:<br />
unames.f Obtêm o nome do problema e suas variáveis.<br />
usetup.f Obtêm do arquivo dat os dados do problema que será minimização.<br />
ufn.f Fornece o valor da função.<br />
ugr.f Fornece o valor do gradiente da função.<br />
Para problemas com restrições os arquivos fixos utilizados são os seguintes:<br />
cnames.f Obtêm o nome do problema e suas variáveis.<br />
csetup.f Obtêm do arquivo dat os dados do problema que será minimização.<br />
cfn.f Fornece o valor da função e das restrições.<br />
cgr.f Fornece o valor do gradiente da função e das restrições.<br />
Para cada problemas, os arquivos gerados após a decodificação são os seguintes:<br />
elfun.f Fornece valores das funções elemento não linear e respectivas derivadas.<br />
group.f Fornece valores das funções de grupo e respectivas derivadas.<br />
range.f Transforma variáveis elementares em internas.<br />
outsdif.dat Contêm os dados do problema que será minimização.<br />
65
6.3 – Resultados Numéricos – Interface FAIPA_CUTEr<br />
Para verificar a funcionalidade da interface FAIPA_CUTEr foram<br />
disponibilizados vários problemas sem restrições e com restrições.<br />
Serão apresentados inicialmente nas Tabelas 6.1(a), 6.1(b) e 6.1(c) os resultados<br />
de problemas resolvidos através do FAIPA com a interface de problemas teste CUTEr.<br />
Nessa etapa a configuração do FAIPA utilizada foi a seguinte: atualização BFGS e<br />
LAPACK Denso. A coluna nprob indica o número do problema na interface.<br />
nprob nome variáveis restrições nbox f ( x)<br />
iterações f eval.<br />
101 HS01 2 0 1 1.24518E-05 37 69<br />
103 HS03 2 0 1 4.65462E-10 17 18<br />
104 HS04 2 0 2 2.6667E+00 6 7<br />
105 HS05 2 0 4 -1.9232E+00 6 8<br />
106 HS06 2 1 0 7.8888E-29 10 12<br />
107 HS07 2 1 0 -1.7321E+00 15 35<br />
108 HS08 2 2 0 -1.0000E+00 7 9<br />
109 HS09 2 1 0 -5.0000E-01 6 7<br />
110 HS10 2 1 0 -1.0000E+00 8 9<br />
111 HS11 2 1 0 -8.4984E+00 11 13<br />
112 HS12 2 1 0 -3.0000E+01 8 12<br />
113 HS13 2 1 2 1.0010E+00 28 30<br />
115 HS15 2 2 1 3.6038E+02 10 11<br />
117 HS17 2 2 3 1.0000E+00 11 12<br />
118 HS18 2 2 4 5.0000E+00 10 11<br />
119 HS19 2 2 4 -6.9618E+03 16 22<br />
121 HS21 2 1 4 -9.9960E+01 11 13<br />
122 HS22 2 2 0 1.0000E+00 8 10<br />
123 HS23 2 5 4 2.000E+00 11 12<br />
124 HS24 2 3 2 -1.000E+00 15 18<br />
126 HS26 3 1 0 2.8124E-07 20 45<br />
127 HS27 3 1 0 4.0000E-02 20 30<br />
Tabela 6.1(a): Problemas HS – FAIPA_CUTEr.<br />
66
nprob nome variáveis restrições nbox f ( x)<br />
iterações f eval.<br />
128 HS28 3 1 0 0.0000E+00 4 6<br />
129 HS29 3 1 0 -2.2627E+00 11 12<br />
130 HS30 3 1 6 1.0000E+00 10 12<br />
131 HS31 3 1 6 6.0000E+00 10 12<br />
132 HS32 3 2 3 1.0000E+00 8 9<br />
133 HS33 3 2 4 -4.5857E+00 14 17<br />
134 HS34 3 2 6 -8.34032E-01 13 16<br />
135 HS35 3 1 3 1.1111E-01 8 10<br />
136 HS36 3 1 6 -3.3000E+03 14 18<br />
137 HS37 3 2 6 -3.4560E+03 17 20<br />
138 HS38 4 0 8 1.0357E-10 19 32<br />
139 HS39 4 2 0 -1.0000E+00 14 14<br />
140 HS40 4 3 0 -2.5000E-01 7 8<br />
141 HS41 4 1 8 1.9259E+00 14 15<br />
142 HS42 4 2 0 1.3858E+01 9 12<br />
143 HS43 4 3 0 -4.4000E+01 12 16<br />
144 HS44 4 6 4 -1.5000E+01 21 27<br />
145 HS45 5 0 10 1.000E+01 24 25<br />
147 HS47 5 3 0 1.36007E-10 29 72<br />
148 HS48 5 2 0 1.60237E-29 4 11<br />
149 HS49 5 2 0 7.0712E-06 17 23<br />
150 HS50 5 3 0 3.23904E-12 17 32<br />
151 HS51 5 3 0 0.0000E+00 3 7<br />
152 HS52 5 3 0 5.3266E+00 6 9<br />
153 HS53 5 3 10 4.0930E+00 7 9<br />
156 HS56 7 4 0 -3.4560E+00 15 22<br />
159 HS59 2 3 4 -6.7495E+00 17 18<br />
160 HS60 3 1 6 3.2568E-02 10 13<br />
163 HS63 3 2 3 9.6172E+02 11 14<br />
164 HS64 3 1 3 6.2998E+03 21 23<br />
165 HS65 4 2 6 9.5353E-01 14 15<br />
166 HS66 4 2 6 5.18163E-01 9 10<br />
171 HS71 4 2 8 1.7014E+01 11 13<br />
172 HS72 4 2 8 7.2767E+02 34 40<br />
173 HS73 4 3 4 2.9894E+01 17 19<br />
Tabela 6.1(b): Problemas HS - FAIPA_CUTEr.<br />
67
nprob nome variáveis restrições nbox f ( x)<br />
68<br />
iterações<br />
174 HS74 4 5 8 5.1265E+03 13 14<br />
175 HS75 4 5 8 5.1744E+03 32 37<br />
176 HS76 4 3 4 -4.6818E+00 10 11<br />
177 HS77 5 2 0 2.4151E-01 16 24<br />
178 HS78 5 3 0 -2.9197E+00 8 10<br />
179 HS79 5 3 0 7.8777E-02 12 14<br />
180 HS80 5 3 10 5.3950E-02 8 9<br />
181 HS81 5 3 10 5.3950E-02 10 12<br />
183 HS83 5 6 10 -3.0665E+04 15 18<br />
184 HS84 5 6 10 -5.2803E+06 21 22<br />
186 HS86 5 10 5 -3.2349E+01 18 24<br />
193 HS93 6 2 6 1.3508E+02 12 14<br />
f eval.<br />
195 HS95 6 4 12 1.5619E-02 8 10<br />
196 HS96 6 4 12 1.5619E-02 8 10<br />
197 HS97 6 4 12 3.1358E+00 18 21<br />
198 HS98 6 4 12 3.1358E+00 28 35<br />
199 HS99 7 2 14 -8.3108E+08 13 27<br />
200 HS100 7 4 0 6.8063E+02 15 17<br />
204 HS104 8 6 16 3.9511E+00 28 29<br />
207 HS107 9 6 8 5.0550E+03 16 21<br />
208 HS108 9 13 1 5.0000E-01 14 17<br />
210 HS110 10 0 20 -4.5778E+01 7 8<br />
212 HS112 10 3 10 -4.6414E+01 19 20<br />
218 HS118 15 29 30 6.6270E+02 45 54<br />
Tabela 6.1(c): Problemas HS - FAIPA_CUTEr.
6.4 - Apresentação do Problema HS43_NF<br />
Para testar as implementações no FAIPA, alterou-se o problema HS43 [28] para<br />
permitir a mudança do número de variáveis e de restrições de tal forma a obtermos um<br />
problema com um número elevado de variáveis.<br />
O problema HS43 original tem 4 variáveis e 3 restrições. O novo problema, que<br />
denominamos de HS43_NF, poderá ter o seu número de variáveis e de restrições<br />
expandido por um valor nf definido pelo usuário.<br />
f<br />
Seja o problema HS43 original com restrições:<br />
f ( x)<br />
= x + x + 2x<br />
+ x − 5x<br />
+ 5x<br />
− 21x<br />
+ 7x<br />
(6.3)<br />
2<br />
1<br />
2<br />
2<br />
2<br />
3<br />
2<br />
4<br />
1<br />
69<br />
2<br />
2 2 2 2<br />
g x)<br />
= −(<br />
8 − x − x − x − x − x + x − x + x )<br />
(6.4)<br />
1(<br />
1 2 3 4 1 2 3 4<br />
2 2 2 2<br />
g x)<br />
= −(<br />
10 − x − 2x<br />
− x − 2x<br />
+ x + x )<br />
(6.5)<br />
2(<br />
1 2 3 4 1 4<br />
2 2 2<br />
g x)<br />
= −(<br />
5 − 2x<br />
− x − x − 2x<br />
+ x + x )<br />
(6.6)<br />
3(<br />
1 2 3 1 2 4<br />
Então, o problema HS43_NF pode ser definido da seguinte maneira:<br />
nf<br />
( x)<br />
= ∑<br />
i=<br />
1<br />
x<br />
2<br />
4i−<br />
3<br />
+ x<br />
Com restrições:<br />
2<br />
4i−2<br />
2<br />
4i−1<br />
4i−3<br />
4i−2<br />
3<br />
2<br />
+ 2 x + x − 5x<br />
+ 5x<br />
− 21x<br />
+ 7x<br />
(6.3)<br />
4i<br />
4<br />
4i−1<br />
2 2 2 2<br />
2 ( x)<br />
= −(<br />
8 − x4<br />
j−3<br />
− x4<br />
j−2<br />
− x4<br />
j−1<br />
− x4<br />
j − x4<br />
j−3<br />
+ x4<br />
j−2<br />
− x4<br />
j−1<br />
x4<br />
)<br />
2<br />
2 2 2<br />
1(<br />
x)<br />
= −(<br />
10 − x4<br />
j−3<br />
− 2x4<br />
j−2<br />
− x4<br />
j−1<br />
− 2x4<br />
j + x4<br />
j−3<br />
x4<br />
)<br />
( x)<br />
2<br />
− 5 − 2x<br />
2<br />
− x<br />
2<br />
− x − 2x<br />
+ x x )<br />
g 3 j−<br />
+ j (6.4)<br />
g 3 j−<br />
+ j<br />
(6.5)<br />
g − +<br />
(6.6)<br />
3 j = ( 4 j 3 4 j−2<br />
4 j−1<br />
4 j−3<br />
4 j−2<br />
4 j<br />
onde j = 1, ... nf .<br />
4i
6.5 – Resultados Numéricos – Comparação entre diferentes resolvedores internos<br />
ao FAIPA.<br />
Utilizou-se o problema HS43_NF para auxiliar na comparação entre os solvers<br />
que resolvem em cada iteração os sistemas internos ao FAIPA. O solver, que<br />
chamaremos de Denso Original, foi programado inicialmente no FAIPA e utiliza o<br />
Método Direto para resolver sistemas densos não simétricos. Foi feita uma comparação<br />
deste com os solvers MA27 e MA28.<br />
Os resultados obtidos foram os seguintes:<br />
FAIPA nf variáveis restrições tempo (s) ordem do sistema<br />
Denso Original 174<br />
MA28 100 400 300 59<br />
700<br />
MA27<br />
17<br />
Denso Original 770<br />
MA28 150 600 450 210<br />
MA27<br />
62<br />
Denso Original 2334<br />
MA28 200 800 600 545<br />
MA27<br />
141<br />
Denso Original 9158<br />
MA28 300 1200 900 1980<br />
MA27<br />
464<br />
Denso Original 97215<br />
MA28 500 2000 1500 9826<br />
MA27<br />
2238<br />
Denso Original -<br />
MA28 1000 4000 3000 84240<br />
MA27<br />
19372<br />
Tabela 6.2: Problemas HS43_NF<br />
1050<br />
1400<br />
2100<br />
3500<br />
7000<br />
De posse desses valores, foi possível obter os gráficos 6.1 e 6.2. No gráfico 6.1<br />
estão plotados os tempos para a resolução de cada problema de acordo com o valor de nf<br />
escolhido considerando os diferentes resolvedores implementados no FAIPA. O gráfico<br />
70
6.2 indica o número de vezes em que a solução do problema com a MA27 é mais rápida<br />
em relação aos outros resolvedores considerando a resolução, através do FAIPA, do<br />
problema HS43_NF.<br />
Com o solver Denso Original não foi possível resolver o problema com nf 1000.<br />
tempo (s)<br />
100000<br />
10000<br />
45<br />
40<br />
35<br />
30<br />
25<br />
20<br />
15<br />
10<br />
5<br />
0<br />
1000<br />
100<br />
10<br />
HS43_NF<br />
0 100 200 300 400 500 600 700 800 900 1000 1100<br />
NF<br />
Gráfico 6.1<br />
71<br />
Original<br />
MA28<br />
MA27<br />
Original / MA27<br />
MA28 / MA27<br />
0 100 200 300 400 500 600 700 800 900 1000 1100<br />
NF<br />
Gráfico 6.2
6.6 – Resultados Numéricos – FAIPA Quase-Newton Esparso.<br />
Com a implementação da nova técnica de atualização esparsa feita na linguagem<br />
Matlab, os resultados obtidos foram comparados com o FAIPA nas opções de<br />
atualização de B através dos métodos Esparso, Memória Limitada, Quase-Newton, e<br />
também considerando B sempre igual a matriz Identidade. Foram utilizados problemas<br />
de Schittkowski [28]. Considerou-se igual a 7 a variável m que indica o número de<br />
pares de vetores k<br />
s e<br />
k<br />
y utilizados na técnica de Memória Limitada. No entanto, na<br />
técnica de atualização esparsa, considerou-se a variável m igual a 5.<br />
Diagonal Mem. Lim. BFGS B=Identidade<br />
Prob. nvar ncstr Função iter. Função iter. Função iter. Função iter.<br />
HS01 2 0 7,1224E+00 300 1,3833E-05 37 2,0060E-07 36 8,3188E+00 300<br />
HS02 2 0 8,1451E-01 300 5,0427E-02 15 5,0428E-02 16 9,5098E-01 300<br />
HS03 2 0 3,0579E-04 300 3,6499E-04 14 3,5879E-04 15 9,8812E-04 300<br />
HS04 2 0 2,6667E+00 4 2,6667E+00 4 2,6667E+00 4 2,6667E+00 5<br />
HS05 2 0 -1,913E+00 6 -1,913E+00 4 -1,913E+00 4 -1,913E+00 6<br />
HS06 2 1 1,6798E-15 14 7,1808E-13 10 2,3268E-07 9 1,4402E-06 14<br />
HS07 2 1 -1,732E+00 12 -1,732E+00 11 -1,732E+00 11 -1,732E+00 23<br />
HS08 2 2 -1,000E+00 9 -1,000E+00 9 -1,000E+00 9 -1,000E+00 9<br />
HS09 2 1 -4,999E-01 6 -5,000E-01 5 -5,000E-01 5 -4,999E-01 92<br />
HS10 2 1 -1,000E+00 9 -1,000E+00 7 -1,000E+00 7 -1,000E+00 9<br />
HS11 2 1 -8,498E+00 6 -8,498E+00 6 -8,498E+00 6 -8,498E+00 13<br />
HS12 2 1 -2,999E+01 4 -3,000E+01 4 -3,000E+01 4 -2,998E+01 4<br />
HS13 2 1 1,0021E+00 21 - - 1,0004E+00 14 - -<br />
HS14 2 2 1,3935E+00 6 1,3935E+00 7 1,3935E+00 7 1,3935E+00 6<br />
HS15 2 2 3,0652E+02 6 3,0651E+02 6 3,0656E+02 6 3,0650E+02 7<br />
HS16 2 2 2,4914E-01 51 2,5012E-01 18 2,5249E-01 18 2,5892E-01 21<br />
HS17 2 2 1,0001E+00 15 1,0000E+00 19 1,0000E+00 20 1,0000E+00 28<br />
HS18 2 2 5,0000E+00 14 5,0000E+00 12 5,0001E+00 13 5,0001E+00 49<br />
HS19 2 2 -6,961E+03 83 -6,961E+03 76 -6,961E+03 114 -6,961E+03 65<br />
HS20 2 3 3,8199E+01 9 3,8199E+01 10 3,8199E+01 9 3,8199E+01 9<br />
HS21 2 1 -9,996E+01 4 -9,996E+01 4 -9,996E+01 4 -9,995E+01 7<br />
HS22 2 2 1,0000E+00 9 1,0000E+00 10 1,0000E+00 10 1,0000E+00 9<br />
HS23 2 5 2,0000E+00 9 2,0000E+00 9 2,0000E+00 9 2,0000E+00 9<br />
HS24 2 3 -1,000E+00 4 -1,000E+00 4 -1,000E+00 4 -1,000E+00 4<br />
Tabela 6.3 - Problemas HS.<br />
72
Diagonal Mem.Lim. BFGS B=Identidade<br />
Prob. nvar ncstr Função iter. Função iter. Função iter. Função iter.<br />
HS25 3 0 7,600E-05 31 1,057E-01 15 1,072E-05 14 2,7687E+00 200<br />
HS26 3 1 9,141E-05 41 1,543E-02 17 1,144E-06 17 1,047E-05 38<br />
HS27 3 1 4,000E-02 34 4,000E-02 22 4,000E-02 19 6,176E-02 300<br />
HS28 3 1 1,829E-08 42 6,160E-28 4 0,000E+00 4 8,9726E-09 26<br />
HS29 3 1 -2,26E+01 14 -2,26E+01 11 -2,26E+01 11 -2,262E+01 41<br />
HS30 3 1 1,000E+00 6 1,000E+00 6 1,000E+00 6 1,0000E+00 6<br />
HS31 3 1 6,000E+00 12 6,000E+00 9 6,000E+00 9 6,0000E+00 61<br />
HS33 3 2 -4,58+00 10 -4,58E+00 14 -4,58E+00 14 -4,58E+00 21<br />
HS34 3 2 -8,34E-01 9 -8,34E-01 12 -8,34E-01 12 -8,34E-01 48<br />
HS35 3 1 1,111E-01 9 1,111E-01 6 1,111E-01 6 1,111E-01 12<br />
HS36 3 1 -3,30E+03 10 -3,30E+07 13 -3,30E+03 12 -3,30E+03 11<br />
HS37 3 2 -3,45E+03 11 -3,45E+07 16 -3,45E+03 14 -3,45E+03 78<br />
HS38 4 0 7,729E-05 43 1,543E-03 15 8,178E-05 16 4,486E+00 300<br />
HS39 4 2 -1,00E+00 14 -1,00E+00 13 -1,00E+00 13 -1,00E+00 25<br />
HS40 4 3 -2,50E-01 7 -2,50E-01 6 -2,50E-01 6 -2,50E-01 10<br />
HS41 4 1 1,925E+00 16 1,925E+00 12 1,925E+00 12 1,926E+00 62<br />
HS42 4 2 1,385E+01 6 1,385E+01 8 1,385E+01 8 1,385E+01 26<br />
HS43 4 3 -4,400+01 10 -4,40E+01 9 -4,40E+01 9 -4,40E+01 32<br />
HS44 4 6 -1,30E+01 17 -1,50E+01 20 -1,50E+01 20 -1,30E+01 19<br />
HS45 5 0 1,00E+00 10 1,000E+00 22 1,000E+00 22 1,000E+00 30<br />
HS46 5 2 2,474E-06 30 1,271E-05 27 2,844E-10 31 1,087E-05 300<br />
HS47 5 3 9,168E-07 20 4,387E-09 12 2,117E-11 12 2,402E-06 42<br />
HS48 5 2 4,407E-10 12 2,095E-27 3 2,588E-31 3 4,497E-10 12<br />
HS49 5 2 3,650E-06 8 5,677E-01 10 6,186E-05 10 6,160E-05 214<br />
HS50 5 3 3,505E-06 15 3,845E-03 13 2,857E-05 11 2,151E-05 13<br />
HS51 5 3 3,475E-06 4 2,465E-32 3 9,860E-32 3 3,456E-06 6<br />
HS52 5 3 5,326E+00 7 5,326E+00 5 5,326E+00 5 1,194E+00 4<br />
HS53 5 3 4,093E+00 7 4,093E+00 5 4,093E+00 5 4,093E+00 5<br />
HS54 6 1 -4,33E-87 8 -5,19E-84 8 -4,33E-83 8 -1,54E-25 4<br />
HS55 6 6 - - 6,333E+00 5 6,333E+00 5 6,333E+00 5<br />
HS56 7 4 -3,45E+00 11 -3,45E+00 9 -3,45E+00 9 -3,45E+00 58<br />
HS57 2 1 3,064E-02 6 2,846E-02 19 2,846E-02 22 3,064E-02 6<br />
HS59 2 3 -7,80E+00 14 -7,80E+00 19 -7,80E+00 22 1,673E+02 86<br />
HS60 3 1 3,257E-02 16 3,256E-02 9 3,256E-02 9 3,257E-02 33<br />
HS61 3 2 -1,43E+02 9 -1,43E+02 10 -1,43E+02 10 -1,43E+02 37<br />
HS62 3 1 -2,62E+04 4 -2,62+04 4 -2,62E+04 4 -2,62E+04 4<br />
Tabela 6.4 - Problemas HS.<br />
73
Diagonal Mem.Lim. BFGS B=Identidade<br />
prob. nvar ncstr Função iter. Função iter. Função iter. Função iter.<br />
HS63 3 2 9,6172E+02 13 9,6172E+02 9 9,6172E+02 9 9,6172E+02 12<br />
HS64 3 1 6,2999E+03 15 6,2999E+03 25 6,2999E+03 27 6,7245E+03 92<br />
HS65 3 1 9,5357E-01 18 9,5353E-01 13 9,5356E-01 13 9,5358E-01 20<br />
HS66 3 2 5,1816E-01 10 5,1817E-01 10 5,1817E-01 10 5,1820E-01 61<br />
HS68 4 2 -9,204E-01 21 -9,204E-01 18 -9,203E-01 19 -9,203E-01 120<br />
HS69 4 2 -9,567E+02 21 -9,567E+02 11 -9,567E+02 11 -9,570E+02 300<br />
HS70 4 1 - - 7,4992E-03 32 7,4995E-03 39 - -<br />
HS71 4 2 1,7014E+01 17 1,7014E+01 16 1,7014E+01 16 1,7014E+01 11<br />
HS72 4 2 - - 7,2768E+02 79 7,2768E+02 153 - -<br />
HS73 4 3 2,9894E+01 19 2,9894E+01 17 2,9894E+01 17 2,9895E+01 15<br />
HS74 4 5 5,1265E+03 70 5,1265E+03 71 5,1265E+03 262 - -<br />
HS75 4 5 5,1744E+03 41 5,1745E+03 39 5,1745E+03 50 5,1744E+03 154<br />
HS76 4 3 -4,681E+00 10 -4,681E+00 8 -4,681E+00 8 -4,681E+00 8<br />
HS77 5 2 2,4151E-01 14 2,4151E-01 17 2,4151E-01 19 2,4151E-01 28<br />
HS78 5 3 -2,919E+00 13 -2,919E+00 7 -2,919E+00 7 -2,919E+00 18<br />
HS79 5 3 7,8777E-02 16 7,8777E-02 10 7,8777E-02 10 7,8786E-02 16<br />
HS80 5 3 5,3950E-02 10 5,3950E-02 8 5,3950E-02 8 5,3993E-02 16<br />
HS81 5 3 5,3950E-02 15 5,3950E-02 10 5,3950E-02 10 5,3988E-02 18<br />
HS83 5 6 -3,066E+04 12 -3,066E+04 13 -3,066E+04 13 -3,066E+04 12<br />
HS84 5 6 -5,280E+06 4 -5,280E+06 4 -5,280E+06 4 -5,280E+06 4<br />
HS86 5 10 -3,234E+01 27 -3,234E+01 13 -3,234E+01 13 -3,234E+01 58<br />
HS93 6 2 1,3508E+02 9 1,3508E+02 7 1,3508E+02 7 1,3508E+02 78<br />
HS95 6 4 1,5620E-02 4 1,5620E-02 4 1,5620E-02 4 1,5620E-02 4<br />
HS96 6 4 1,5620E-02 10 1,5624E-02 7 1,5624E-02 7 1,5671E-02 6<br />
HS97 6 4 3,1359E+00 9 3,1358E+00 8 3,1358E+00 8 3,1359E+00 9<br />
HS98 6 4 3,1358E+00 35 3,1358E+00 37 4,0712E+00 31 3,1358E+00 249<br />
HS99 7 2 -8,310E+08 6 -8,310E+08 21 -8,310E+08 12 -8,221E+08 300<br />
HS100 7 4 6,8063E+02 9 6,8064E+02 17 6,8063E+02 11 6,8063E+02 94<br />
HS101 7 6 1,8098E+03 26 1,8098E+03 39 1,8098E+03 22 1,8146E+03 300<br />
HS102 7 6 9,1189E+02 22 9,1188E+02 27 9,1188E+02 29 9,1335E+02 300<br />
HS103 7 6 5,4367E+02 18 5,4367E+02 22 5,4367E+02 18 5,6189E+02 300<br />
HS104 8 6 3,9512E+00 16 3,9512E+00 17 3,9512E+00 18 3,9512E+00 086<br />
HS105 8 1 1,1385E+03 67 1,1384E+03 63 1,1384E+03 54 1,1515E+03 300<br />
HS106 8 6 7,0493E+04 36 7,0493E+04 55 7,0493E+04 107 - -<br />
HS107 9 6 5,0550E+03 14 5,0550E+03 15 5,0550E+03 15 5,0551E+03 222<br />
Tabela 6.5 - Problemas HS.<br />
74
Diagonal Mem.Lim. BFGS B=Identidade<br />
Prob. nvar ncstr Função iter. Função iter. Função iter. Função iter.<br />
HS108 9 13 -5,000E-01 14 -5,000E-01 20 -5,000E-01 20 6,4036E-11 15<br />
HS109 9 10 5,3621E+03 8 5,3621E+03 8 5,3621E+03 8 5,3621E+03 8<br />
HS110 10 0 -4,577E+01 5 -4,577E+01 4 -4,577E+01 4 -4,577E+01 4<br />
HS111 10 3 -4,776E+01 21 -4,776E+01 34 -4,776E+01 35 -4,776E+01 300<br />
HS112 10 3 -4,774E+01 8 -4,771E+01 11 -4,770E+01 11 -4,770E+01 38<br />
HS113 10 8 2,4267E+01 31 2,4267E+01 28 2,4267E+01 24 2,4268E+01 53<br />
HS114 10 11 -1,768E+03 99 -1,768E+03 105 -1,768E+03 116 -1,5534+03 150<br />
HS116 13 15 9,7589E+01 33 9,7588E+01 65 9,7589E+01 53 4,8883E-05 49<br />
HS117 15 5 3,2349E+01 30 3,2349E+01 56 3,2349E+01 50 3,2349E+01 73<br />
HS118 15 29 6,6482E+02 30 6,6483E+02 51 6,6483E+02 46 6,6506E+02 300<br />
HS119 16 8 2,4490E+02 44 2,4490E+02 100 2,4490E+02 77 3,7452E+04 300<br />
Tabela 6.6 - Problemas HS.<br />
Quando utilizou-se a atualização esparsa para resolver os problemas HS01,<br />
HS02 e HS03, a convergência foi muito lenta e extrapolou o limite de 300 iterações.<br />
Para a resolução dos problemas HS07, HS26, HS46, HS49, HS77, HS106 e HS114 foi<br />
necessário alterar os critérios de parada e o número de pares de vetores<br />
os problemas HS55, HS70 e HS72 não foi possível encontrar a solução.<br />
75<br />
k<br />
s e<br />
k<br />
y . Com<br />
Do Gráfico 6.3 ao Gráfico 6.14 estão representados de uma forma mais clara as<br />
informações das Tabelas 6.3, 6.4, 6.5 e 6.6. Nesses gráficos foram plotados as iterações<br />
que o FAIPA efetuou para resolver os problemas HS utilizando diferentes configurações<br />
para a atualização da matriz B: a BFGS, a Diagonal (Esparsa) e de Memória Limitada.<br />
Através desses gráficos podemos perceber que a atualização esparsa apresenta na<br />
grande maioria dos casos um bom comportamento com relação ao número de iterações<br />
quando comparado com os demais métodos utilizados.
Iterações<br />
Iterações<br />
120<br />
100<br />
80<br />
60<br />
40<br />
20<br />
0<br />
120<br />
100<br />
80<br />
60<br />
40<br />
20<br />
0<br />
HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10<br />
ESP<br />
M.LIM<br />
BFGS<br />
Gráfico 6.3<br />
76<br />
ESP<br />
M.LIM<br />
BFGS<br />
HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20<br />
Gráfico 6.4
Iterações<br />
45<br />
40<br />
35<br />
30<br />
25<br />
20<br />
15<br />
10<br />
5<br />
0<br />
Iterações<br />
ESP<br />
M.LIM<br />
BFGS<br />
HS21 HS22 HS23 HS24 HS25 HS26 HS27 HS28 HS29 HS30<br />
45<br />
40<br />
35<br />
30<br />
25<br />
20<br />
15<br />
10<br />
5<br />
0<br />
ESP<br />
M.LIM<br />
BFGS<br />
Gráfico 6.5<br />
HS31 HS32 HS33 HS34 HS35 HS36 HS37 HS38 HS39 HS40<br />
Gráfico 6.6<br />
77
Iterações<br />
Iterações<br />
35<br />
30<br />
25<br />
20<br />
15<br />
10<br />
5<br />
0<br />
30<br />
25<br />
20<br />
15<br />
10<br />
5<br />
0<br />
HS41 HS42 HS43 HS44 HS45 HS46 HS47 HS48 HS49 HS50<br />
ESP<br />
M.LIM<br />
BFGS<br />
Gráfico 6.7<br />
78<br />
ESP<br />
M.LIM<br />
BFGS<br />
HS51 HS52 HS53 HS54 HS55 HS56 HS57 HS59 HS60<br />
Gráfico 6.8
Iterações<br />
Iterações<br />
70<br />
60<br />
50<br />
40<br />
30<br />
20<br />
10<br />
0<br />
300<br />
250<br />
200<br />
150<br />
100<br />
50<br />
0<br />
ESP<br />
M.LIM<br />
BFGS<br />
HS61 HS62 HS63 HS64 HS65 HS66 HS68 HS69 HS70<br />
Gráfico 6.9<br />
HS71 HS72 HS73 HS74 HS75 HS76 HS77 HS78 HS79 HS80<br />
Gráfico 6.10<br />
79<br />
ESP<br />
M.LIM<br />
BFGS
Iterações<br />
Iterações<br />
40<br />
35<br />
30<br />
25<br />
20<br />
15<br />
10<br />
5<br />
0<br />
70<br />
60<br />
50<br />
40<br />
30<br />
20<br />
10<br />
0<br />
ESP<br />
M.LIM<br />
BFGS<br />
HS81 HS83 HS84 HS86 HS93 HS95 HS96 HS97 HS98 HS99<br />
ESP<br />
M.LIM<br />
BFGS<br />
Gráfico 6.11<br />
HS100 HS101 HS102 HS103 HS104 HS105<br />
Gráfico 6.12<br />
80
Iterações<br />
Iterações<br />
120<br />
100<br />
80<br />
60<br />
40<br />
20<br />
0<br />
120<br />
100<br />
80<br />
60<br />
40<br />
20<br />
0<br />
HS106 HS107 HS108 HS109 HS110 HS111<br />
Gráfico 6.13<br />
81<br />
ESP<br />
M.LIM<br />
BFGS<br />
ESP<br />
M.LIM<br />
BFGS<br />
HS112 HS113 HS114 HS116 HS117 HS118 HS119<br />
Gráfico 6.14
6.7 - Problema HS43_NF para auxiliar na comparação entre as Técnicas de<br />
Atualização Diagonal, BFGS e Memória Limitada.<br />
Os exemplos que utilizaram os resolvedores Denso Original, MA27 e MA28<br />
rodaram em um computador AMD Atlon 1800 MHz com 1,5Gb de Memória RAM. Os<br />
exemplos que utilizaram a rotina SSTSTRF/S rodaram no computador CRAY SV1 com<br />
12 processadores e 16Gb de memória RAM. A medida de tempo (em segundos)<br />
representa o tempo total a partir do início até finalizar a execução (tempo de parede).<br />
nf variáveis restrições tempo(s) iterações solver<br />
Atualização<br />
da matriz B<br />
9158 11 DensoOrig BFGS<br />
1980 11 MA28 BFGS<br />
300 1200 900<br />
464<br />
67<br />
11<br />
13<br />
MA27<br />
MA27<br />
BFGS<br />
ESP<br />
1475 13 SSTSTRFS BFGS<br />
29 14 SSTSTRFS ESP<br />
97215 12 DensoOrig BFGS<br />
9826 12 MA28 BFGS<br />
500 2000 1500<br />
2238<br />
240<br />
12<br />
14<br />
MA27<br />
MA27<br />
BFGS<br />
ESP<br />
6876 14 SSTSTRFS BFGS<br />
51 16 SSTSTRFS ESP<br />
- - DensoOrig BFGS<br />
84240 12 MA28 BFGS<br />
1000 4000 3000<br />
19372<br />
1482<br />
12<br />
14<br />
MA27<br />
MA27<br />
BFGS<br />
ESP<br />
55312 16 SSTSTRFS BFGS<br />
153 17 SSTSTRFS ESP<br />
Tabela 6.7 - Comparação entre diversas atualizações de B e diversos resolvedores.<br />
Na Tabela 6.7 está a descrição do tamanho do problema e o tempo para encontrar a<br />
solução. A coluna nf indica o valor escolhido para aumentar o tamanho do problema. A<br />
atualização Quase-Newton clássica é representada pela sigla BFGS, enquanto a nova<br />
técnica de atualização diagonal esparsa é representada pela sigla ESP.<br />
O Gráfico 6.15 apresenta os dados da Tabela 6.7 tornando possível uma melhor<br />
visualização do desempenho do FAIPA ao utilizar diferentes tipos de resolvedores e<br />
diferentes técnicas de atualização da matriz Quase-Newton.<br />
82
Tempo (s)<br />
100000<br />
10000<br />
1000<br />
100<br />
10<br />
300 500<br />
NF<br />
1000<br />
83<br />
MA28/BFGS<br />
SSTSTRFS/BFGS<br />
MA27/BFGS<br />
MA27/ESP<br />
SSTSTRFS/ESP<br />
Gráfico 6.15 – Desempenho do FAIPA para resolver o problema HS43_NF<br />
utilizando a atualização Esparsa e BFGS.<br />
Considerando valores maiores de nf, a atualização BFGS deixa de ser viável<br />
devido ao seu alto custo computacional. Nesses casos iremos comparar as técnicas<br />
Diagonal e de Memória Limitada através do CRAY SV1. O FAIPA_Esparso nesse caso<br />
usou o solver SSTSTRF/S enquanto o FAIPA com a opção Memória Limitada usou o<br />
solver SGETRF/S do LAPACK. A redução no tempo quando se utiliza a técnica<br />
diagonal esparsa é muito grande. Os dados dessa comparação estão na Tabela 6.8.<br />
nf variáveis restrições iter F tempo(s) CPUtime(s)<br />
1500 6000 4500 16 66000 32832 294636,4<br />
MemLim 2000 8000 6000 17 88000 13164 107678,7<br />
3000 12000 9000 15 132000 83586 821123,2<br />
1500 6000 4500 16 66000 257 1039,1<br />
Diagonal 2000 8000 6000 16 88000 412 1118,6<br />
3000 12000 9000 13 132000 759 2121,5<br />
Tabela 6.8 - Comparação entre as atualizações Diagonal Esparsa e Memória Limitada.<br />
Destaque para os tempos para resolver o problema nf 3000.
6.8 - Problemas CUTEr para auxiliar na comparação entre as técnicas de<br />
Atualização Diagonal e Memória Limitada.<br />
As tabelas 6.9 e 6.10 apresentam problemas da coleção CUTEr. Os que integram<br />
a Tabela 6.9 fazem parte também da coleção COPS [5]. Nessas duas tabelas, a primeira<br />
coluna contém o código do problema na interface CUTEr e em seguida estão as colunas<br />
com o nome, o número de variáveis e o número de restrições (igualdade e desigualdade<br />
somadas). As colunas “LB” e “UB” contém restrições de caixa inferior (lower bound) e<br />
superior (upper bound), respectivamente. A coluna “n-sys” contém os valores que<br />
indicam a dimensão do sistema primal-dual do FAIPA. A coluna “f-cute” indica os<br />
prováveis valores da função na solução segundo o CUTEr. Em alguns casos o valor da<br />
função não é fornecido.<br />
Esses problemas auxiliarão na comparação entre a Técnica de Atualização<br />
Diagonal e a Técnica de Memória Limitada em problemas um número maior de<br />
variáveis e/ou restrições.<br />
A resolução de problemas com a Técnica de Atualização Diagonal utilizou a<br />
rotina MA27 para resolver os sistemas internos do FAIPA.<br />
A resolução de problemas com a Técnica de Memória Limitada utilizou a rotina<br />
SSGETRF/S (LAPACK) para resolver os sistemas internos do FAIPA.<br />
prob. nome variáveis restrições LB UB n-sys f-cute<br />
P-01 POLYGON 01 48 324 48 48 468 0,77974<br />
P-02 POLYGON 02 98 1274 98 98 1568 0,7839<br />
P-03 POLYGON 03 198 5049 198 198 5643 0,7847<br />
P-05 CAMSHAPE 05 100 304 100 100 604 -4,2841<br />
P-06 CAMSHAPE 06 200 604 200 200 1204 -4,2785<br />
P-09 MINSURFO 09 2502 0 2502 0 5004 2.51488<br />
P-13 MINSURFO 13 627 0 627 0 1254 -<br />
P-14 ELEC 14 75 25 0 0 100 243,812<br />
P-15 ELEC 15 150 50 0 0 200 1055,18<br />
P-18 CHAIN 18 100 51 0 0 151 5,07226<br />
P-19 CHAIN 19 200 101 0 0 301 5,06987<br />
Tabela 6.9 – Problemas do CUTEr (COPS).<br />
84
prob. nome variáveis restrições LB UB n-sys f-cute<br />
P-34 KSIP 34 20 1001 0 0 1021 0,57579<br />
P-35 YAO 35 2000 2000 1 0 4001 197,705<br />
P-37 BIGGSB1 37 5000 0 4999 4999 14998 0,015<br />
P-47 GASOIL 47 1301 1298 3 0 2602 0,005236<br />
P-48 CVXBQP1 48 100 0 100 100 300 227,25<br />
P-49 BIGGSB1 49 100 0 99 99 298 0,015<br />
P-53 SVANBERG 53 100 100 100 100 400 166,1972<br />
P-54 GASOIL 54 2601 2598 3 0 5202 0,005236<br />
P-55 CVXBQP1 55 1000 0 1000 1000 3000 -<br />
P-56 BIGGSB1 56 1000 0 999 999 2998 0,015<br />
P-57 GILBERT 57 1000 1 1 0 1002 482,0273<br />
P-60 SVANBERG 60 1000 1000 1000 1000 4000 1671,43<br />
Tabela 6.10 – Problemas do CUTEr.<br />
Para uma melhor compreensão dos resultados, os problemas foram divididos em<br />
quatro grupos.<br />
O Grupo 1 é formado pelos problemas: ELEC 14, ELEC 15, CHAIN 18,<br />
CHAIN 19, CAMSHAPE 05 e CAMSHAPE 06.<br />
O Grupo 2 é formado pelos problemas: POLYGON 01, POLYGON 02,<br />
POLYGON 03, MINSURFO 09 e MINSURFO 13.<br />
O Grupo 3 é formado pelos problemas: KSIP 34, CVXBQP 48, BIGGSB1 49,<br />
SVANBERG 53 e GILBERT 57.<br />
O Grupo 4 é formado pelos problemas: YAO 35, BIGGSB1 37, GASOIL 54,<br />
CVXBQP1 55, SVANBERG 60 e GASOIL 47.<br />
85
Para cada problema será apresentado o número de iterações, o tempo (em<br />
segundos) e o valor da função de acordo com a solução obtida com cada uma das<br />
técnicas consideradas na comparação. De posse dos valores das iterações e do tempo de<br />
cada problema, foram criados gráficos para visualizar melhor os resultados de cada<br />
grupo de problemas.<br />
As tabelas 6.11, 6.12, 6.13 e 6.14 apresentam os resultados obtidos com os<br />
grupos 1, 2, 3 e 4 respectivamente. A coluna δ contém os valores desse parâmetro da<br />
atualização diagonal considerado em cada problema.<br />
Atualização Diagonal Memória Limitada<br />
nome n_sys δ it. t (s) f it. t (s) f<br />
ELEC 14 100 1 119 6 243,813 183 2 243,813<br />
ELEC 15 200 1 291 30 1055,18 458 20 1055,18<br />
CHAIN 18 151 0,1 537 4 5,0772 1585 48 5,0732<br />
CHAIN 19 301 0,1 679 21 5,0775 2000 369 5,0768<br />
CAMSHAPE 05 604 0,01 19 1 -4,2841 35 181 -4,2840<br />
CAMSHAPE 06 1204 0,01 7 1 -4,2782 10 404 -4,2769<br />
Tabela 6.11 – Resultados obtidos com os problemas do Grupo 1.<br />
Atualização Diagonal Memória Limitada<br />
nome n_sys δ it. t (s) f it. t (s) f<br />
POLYGON 01 468 0,01 28 1 -0,77967 42 112 -0,77971<br />
POLYGON 02 1568 0,01 30 10 -0,78368 25 2704 -0,78338<br />
POLYGON 03 5643 0,01 37 56 -0,78453 18 18172 -0,78443<br />
MINSURFO 09 5004 1 56 71 2,52 178 231600(*) 2,52705<br />
MINSURFO 13 1254 1 195 18 2,5291 147 3131 2,5289<br />
Tabela 6.12 – Resultados obtidos com os problemas do Grupo 2.<br />
86
Atualização Diagonal Memória Limitada<br />
nome n_sys δ it. t (s) f it. t (s) f<br />
KSIP 34 1021 0,1 21 3 0,57579 22 679 0,57581<br />
CVXBQP1 48 300 0,1 15 0 227,250 89 41 227,253<br />
BIGGSB1 49 298 0,1 819 3 0,01509 72 33 0,01508<br />
SVANBERG 53 400 1 52 2 166,197 43 56 166,197<br />
GILBERT 57 1002 1 71 25 482,027 77 1 482,027<br />
Tabela 6.13 – Resultados obtidos com os problemas do Grupo 3.<br />
Atualização Diagonal Memória Limitada<br />
nome n_sys δ it. t (s) f it. t (s) f<br />
YAO 35 4001 0,1 30 224 227,074 - - -<br />
BIGGSB1 37 14998 0,1 881 4632 0,01592 1 43000 (*) 0,6711<br />
GASOIL 54 5202 0,01 380 4809 0,005241 37 43000 (*) 34,1902<br />
CVXBQP1 55 3000 0,1 31 7 22522,5 116 43000 (*) 102553<br />
BIGGSB1 56 2998 0,1 881 201 0,01592 919 415200 0,01582<br />
SVANBERG 60 4000 0,1 311 717 1671,43 34 43000 (*) 1936,58<br />
GASOIL 47 2602 0,01 179 486 0,005241 37 43000 (*) 34,1902<br />
Tabela 6.14 – Resultados obtidos com os problemas do Grupo 4. Os tempos com a<br />
indicação (*) atingiram o limite máximo de 12 horas.<br />
Ao resolver os problemas da Tabela 6.11 ELEC 14 e ELEC 15 com a Técnica de<br />
Atualização Diagonal, foi necessário um menor número de iterações em relação a<br />
Técnica de Memória Limitada. Com os problemas CHAIN 18, CHAIN 19,<br />
CAMSHAPE 05 e CAMSHAPE 06 a Técnica de Memória Limitada apresentou mais<br />
iterações que a Técnica de Atualização Diagonal. A Técnica de Memória Limitada foi<br />
mais rápida que a esparsa nos problemas ELEC 14 e 15, e mais demorada nos demais<br />
problemas da Tabela 6.11.<br />
87
Na Tabela 6.12 a Técnica de Atualização Diagonal foi mais rápida em todos os<br />
casos. A Técnica de Memória Limitada ao resolver o MINSURFO 09 demorou mais de<br />
dois dias para obter a solução, enquanto a Técnica Esparsa resolveu em 71 segundos.<br />
Na Tabela 6.13 os problemas KSIP 34 e CVXBQP1 48 ao serem resolvidos com<br />
a Técnica Esparsa apresentaram menos iterações e menor tempo. No entanto o<br />
BIGGSB1 49 apresentou muitas iterações para atingir a solução, mesmo assim com<br />
tempo menor que o obtido com Memória Limitada. A Técnica de Memória Limitada foi<br />
bem mais rápida que a Atualização Diagonal ao resolver o GILBERT 57.<br />
Na Tabela 6.14 a Técnica de Atualização Diagonal foi significativamente mais<br />
rápida que a Memória Limitada. Com a Diagonal, nenhum dos problemas foi resolvido<br />
com mais de duas horas. Com Memória Limitada considerou-se um limite de doze horas<br />
para término da execução. A exceção foi o problema BIGGSB1 56, o qual foi permitido<br />
obter a solução após cinco dias aproximadamente. O problema YAO 35, que não<br />
apresenta ponto inicial viável, ao ser resolvido com Memória Limitada, um ponto viável<br />
é obtido, porém a execução é encerrada sem apresentar nenhuma iteração.<br />
Percebe-se que, com o aumento do tamanho dos problemas, a Técnica de<br />
Memória Limitada exige um tempo cada vez maior que a Técnica de Atualização<br />
Diagonal, tornando-a inviável em computadores seqüenciais.<br />
Uma desvantagem da Técnica Quase-Newton Diagonal é a determinação do<br />
valor δ mais adequado para cada problema. No entanto, a rapidez com a qual essa<br />
técnica permite a atualização de B em problemas grandes, a torna interessante em<br />
estudos que visam melhorar ainda mais a sua eficiência na resolução de problemas de<br />
otimização de grande porte.<br />
A seguir estão os gráficos que apresentam o número de iterações e o tempo (em<br />
segundos) para cada problema.<br />
Nesses gráficos, a indicação ESP se refere à Técnica de Atualização Diagonal,<br />
enquanto que a indicação ML se refere à Técnica de Memória Limitada.<br />
88
ESP<br />
ML<br />
Iterações<br />
2000<br />
1800<br />
1600<br />
1400<br />
1200<br />
1000<br />
800<br />
600<br />
400<br />
200<br />
0<br />
ELEC 14<br />
ELEC 15<br />
CHAIN 18<br />
89<br />
CHAIN 19<br />
CAMSHAPE 05<br />
CAMSHAPE 06<br />
Gráfico 6.16 – Comparação entre a Atualização Diagonal e Memória Limitada<br />
considerando o número de iterações utilizando os problemas da Tabela 6.7<br />
ESP<br />
ML<br />
Tempo (s)<br />
450<br />
400<br />
350<br />
300<br />
250<br />
200<br />
150<br />
100<br />
50<br />
0<br />
ELEC 14<br />
ELEC 15<br />
CHAIN 18<br />
CHAIN 19<br />
CAMSHAPE 05<br />
CAMSHAPE 06<br />
Gráfico 6.17 – Comparação entre a Atualização Diagonal e Memória Limitada<br />
considerando o tempo para atingir a solução, utilizando os problemas da Tabela 6.7
ESP<br />
ML<br />
Iterações<br />
200<br />
180<br />
160<br />
140<br />
120<br />
100<br />
80<br />
60<br />
40<br />
20<br />
0<br />
POLYGON 01<br />
POLYGON 02<br />
POLYGON 03<br />
90<br />
MINSURFO 09<br />
MINSURFO 13<br />
Gráfico 6.18 – Comparação entre a Atualização Diagonal e de Memória Limitada<br />
considerando o número de iterações utilizando os problemas da Tabela 6.8<br />
ESP<br />
ML<br />
Tempo (s)<br />
5000<br />
4500<br />
4000<br />
3500<br />
3000<br />
2500<br />
2000<br />
1500<br />
1000<br />
500<br />
0<br />
POLYGON 01<br />
POLYGON 02<br />
POLYGON 03<br />
MINSURFO 09<br />
MINSURFO 13<br />
Gráfico 6.19 – Comparação entre a Atualização Diagonal e Memória Limitada<br />
considerando o tempo para atingir a solução, utilizando os problemas da Tabela 6.8
ESP<br />
ML<br />
Iterações<br />
900<br />
800<br />
700<br />
600<br />
500<br />
400<br />
300<br />
200<br />
100<br />
0<br />
KSIP 34<br />
CVXBQP1 48<br />
BIGGSB1 49<br />
91<br />
SVANBERG 53<br />
GILBERT 57<br />
Gráfico 6.20 – Comparação entre a Atualização Diagonal e Memória Limitada<br />
considerando o número de iterações utilizando os problemas da Tabela 6.9<br />
ESP<br />
ML<br />
Tempo (s)<br />
700<br />
600<br />
500<br />
400<br />
300<br />
200<br />
100<br />
0<br />
KSIP 34<br />
CVXBQP1 48<br />
BIGGSB1 49<br />
SVANBERG 53<br />
GILBERT 57<br />
Gráfico 6.21 – Comparação entre a Atualização Diagonal e Memória Limitada<br />
considerando o tempo para atingir a solução, utilizando os problemas da Tabela 6.9
ESP<br />
ML<br />
Iterações<br />
1000<br />
900<br />
800<br />
700<br />
600<br />
500<br />
400<br />
300<br />
200<br />
100<br />
0<br />
YAO 35<br />
BIGGSB1 37<br />
GASOIL 54<br />
CVXBQP1 55<br />
92<br />
BIGGSB1 56<br />
SVANBERG 60<br />
GASOIL 47<br />
Gráfico 6.22 – Comparação entre a Atualização Diagonal e de Memória Limitada<br />
considerando o número de iterações utilizando os problemas da Tabela 6.10<br />
ESP<br />
ML<br />
Tempo (s)<br />
16000<br />
14000<br />
12000<br />
10000<br />
8000<br />
6000<br />
4000<br />
2000<br />
0<br />
YAO 35<br />
BIGGSB1 37<br />
GASOIL 54<br />
CVXBQP1 55<br />
BIGGSB1 56<br />
SVANBERG 60<br />
GASOIL 47<br />
Gráfico 6.23 – Comparação entre a Atualização Diagonal e Memória Limitada<br />
considerando o tempo para atingir a solução, utilizando os problemas da Tabela 6.10
com as técnicas BFGS e Memória Limitada.<br />
93<br />
CAPÍTULO 7<br />
Conclusões e Propostas<br />
Obteve-se uma atualização Quase-Newton que produz matrizes esparsas e<br />
definidas positivas para que algoritmos de otimização, como o FAIPA, possam garantir<br />
convergência. Além disso, a Técnica de Atualização Diagonal apresenta um reduzido<br />
custo computacional e aumenta o número de elementos nulos da matriz do sistema<br />
primal-dual do FAIPA, permitindo um melhor aproveitamento de solvers esparsos<br />
reduzindo ainda mais o custo computacional ao resolver problemas de grande porte.<br />
Em linguagem Matlab foram feitos os primeiros testes que confirmaram a<br />
viabilidade da técnica, pois se obteve bons resultados, em problemas pequenos, quando<br />
comparada com as técnicas de atualização BFGS e Memória Limitada. Em poucos<br />
casos a convergência foi lenta (HS01, HS02 e HS03) ou não apresentou solução (HS55,<br />
HS70 e HS72).<br />
Simultaneamente a essa etapa, foi feita a implementação da ferramenta CUTEr<br />
(basicamente em Linguagem FORTRAN 90) que permite resolver problemas pequenos,<br />
médios e de grande porte juntamente com o FAIPA. Inicialmente foram resolvidos<br />
problemas pequenos do tipo HS [28] para certificar-se de que a interface estava<br />
funcionando e posteriormente auxiliar no fornecimento de problemas de grande porte.<br />
Quando foi feita a comparação com problemas maiores (HS43_NF) as Tabelas 6.7<br />
e 6.8 [22] indicaram uma superioridade da Técnica de Atualização Diagonal, com<br />
relação a redução no tempo necessário para resolver cada problema, quando comparada
Na Tabela 6.8 [22] foram executados problemas maiores em ambiente de<br />
computação de alto desempenho (CRAY SV1). O destaque dessa tabela é o valor nf =<br />
3000 que gera um problema cujos sistemas lineares internos ao FAIPA apresentam<br />
21000 equações. Ao utilizar Memória Limitada para resolver esse problema obteve-se a<br />
solução em 83586 segundos, enquanto com a Técnica de Atualização Diagonal o tempo<br />
foi de 759 segundos, em ambos os casos o número de iterações foram parecidos. Com o<br />
BFGS Clássico, mesmo em ambiente de computação de alto desempenho, não foi<br />
possível obter resultados com problemas desse porte.<br />
Ao utilizar a ferramenta CUTEr com problemas amplamente utilizado para testar<br />
algoritmos de otimização, como o FAIPA, preparou-se um conjunto de problemas para<br />
comparar as Técnicas de Memória Limitada e a Técnica de Atualização Diagonal.<br />
Nessa etapa foi utilizado um computador AMD 1800MHz 1.5Gb, pois o computador<br />
CRAY SV1 estava desativado definitivamente.<br />
Os resultados contidos nas Tabelas 6.11, 6.12 e 6.13 indicaram que a Técnica<br />
Quase-Newton de Atualização Diagonal geralmente apresenta desempenho melhor no<br />
que diz respeito ao tempo consumido para a resolução desses problemas, apresentando,<br />
de modo geral, bons resultados quanto ao número de iterações.<br />
Na Tabela 6.14 a Técnica de Atualização Diagonal destacou-se muito quanto à<br />
rapidez para obter a solução em problemas com um número maior de equações. Nesse<br />
conjunto de problemas a Técnica Diagonal não apresentou nenhuma situação em que<br />
houvesse necessidade de mais de duas horas para encontrar a solução.<br />
A Técnica de Memória Limitada se mostrou muito demorada quando se trata de<br />
problemas com um número maior de equações como os apresentados na Tabela 6.14.<br />
Em todos os problemas dessa tabela não é possível obter solução com um tempo inferior<br />
a doze horas. Possivelmente a resolução de cada um desses problemas se prolongará por<br />
um dia ou mais, haja vista que no problema SVANBERG 60 essa técnica demorou<br />
aproximadamente cinco dias para encontrar a solução.<br />
Apesar do bom desempenho apresentado pela Técnica de Atualização Diagonal,<br />
alguns ajustes podem ser feitos para melhorar essa técnica. Dentre elas está o modo de<br />
obtenção do parâmetro que precisa ser feita com uma técnica que funcione em todos os<br />
casos.<br />
94
A utilização de computadores de alto desempenho como o ALTIX SGI,<br />
disponível a partir de junho de 2005 através do Núcleo de Atendimento em Computação<br />
de Alto Desempenho (NACAD-COPPE/<strong>UFRJ</strong>), permitirá um melhor aproveitamento<br />
das técnicas apresentadas nesse trabalho, uma vez que o computador CRAY SV1 foi<br />
desativado em novembro de 2004.<br />
95
96<br />
CAPÍTULO 8<br />
Referências Bibliográficas<br />
[1] BURDAKOV, O. P., MARTÍNEZ, J. M. and PILOTTA, E. A., “A Limited-Memory<br />
Multipoint Symmetric Secant Method for Bound Constrained Optimization”, Annals of<br />
Operations Research, v. 117, pp. 51-70, Kluwer Academics Publishers, Netherdlands,<br />
2003.<br />
[2] BYRD R. H., NOCEDAL J., and SCHNABEL R. B., “Representations of Quasi-<br />
Newton Matrices and Their use in Limited Memory Methods”, Mathematical<br />
Programming v. 63, pp. 129-156, 1994.<br />
[3] CANELAS, A., Técnicas de Ponto Interior para Sistemas de Equações e<br />
Otimização Não-Linear, Tese de M.Sc., COPPE/<strong>UFRJ</strong>, Rio de Janeiro, RJ, Brasil,<br />
2005.<br />
[4] CRAYDOC, Scientific Libraries User’s Guide, Cray Inc., USA, 2002.<br />
[5] DOLAN, E.D., MORÉ, J.J. and MUNSON, T.S., Benchmarking Optimization<br />
Software with COPS 3.0, Technical Report ANL/MCS-TM-273, Argonne National<br />
Laboratory, Illinois, USA, February, 2004.
[6] DUFF, I.S. and REID, J.K., The “Multifrontal Solution of Indefinite Sparse<br />
Symmetric Linear Equations”, ACM Transactions on Mathematical Software v. 9, n. 3,<br />
pp. 302-325, Sep. 1983.<br />
[7] DUFF, I.S., ERISMAN, A.M. and REID, J.K., Directs Methods for Sparse<br />
Matrices. Oxford, England, Oxford University Press, 1986.<br />
[8] DUFF, I.S., Direct Methods, Technical Report RAL-TR-1998-054, Rutherford<br />
Appleton Laboratory, 1998.<br />
[9] DUFF, I.S., Matrix Methods, Technical Report RAL-TR-1998-076, Rutherford<br />
Appleton Laboratory, 1998.<br />
[10] DUBEUX, V.J.C., Técnicas de Programação Não-Linear para Otimização de<br />
Grande Porte, Tese de D.Sc., COPPE/<strong>UFRJ</strong>, Rio de Janeiro, RJ, Brasil, 2005.<br />
[11] DENNIS, J. E. and SCHNABEL, R. B., Numerical Methods for Unconstrained<br />
Optimization and Nonlinear Equations. New York, Prentice-Hall, 1983.<br />
[12] DONGARRA, J. J., DUFF, I. S., SORENSEN, D. C. and VORST, H. A., Solving<br />
Linear Systems on Vector and Shared Memory Computers. Philadelphia, USA, SIAM,<br />
1993.<br />
[13] FLETCHER, R., “An Optimal Positive Definite Update for Sparse Hessian<br />
Matrices”, SIAM Journal on Optimization, v. 5, n. 1, pp. 192-218, Feb. 1995.<br />
[14] FLETCHER, R., GROTHEY, A. and LEYFFER, S., Computing Sparse Hessian<br />
and Jacobian Approximations with Hereditary Properties, Tech. Report, Department of<br />
Mathematics, University of Dundee, 1996.<br />
[15] GEORGE, A. and LIU, J.W.H, Computer Solution of Large Sparse Positive<br />
Definite Systems, Englewood Cliffs, New Jersey, Prentice-Hall, 1981.<br />
97
[16] GOLDFELD, P., DUARTE, A. and HERSKOVITS, J., “A Limited Memory<br />
Interior Points Technique for Nonlinear Optimization”. ECCOMAS 96, Paris, França,<br />
September, 1996.<br />
[17] GOULD, N.I.M., ORBAN, D. and TOINT, P.L., General CUTEr and SifDec<br />
Documentation, England, 2002. http://hsl.rl.ac.uk/cuter-www<br />
[18] GOULD, I.M. and SCOTT, J.A., A numerical evaluation of HSL packages for<br />
direct-solution of large sparse, symmetric linear systems of equations, Technical Report<br />
RAL-TR-2003-019, Rutherford Appleton Laboratory, 2003.<br />
[19] GREENSTADT, J., “Variations on Variable Metric Methods”, Mathematics of<br />
Computation, v. 24, pp.1-22, 1970.<br />
[20] GRIEWANK, A. and TOINT, P.L., “Numerical Experiments with Partially<br />
Separable Optimization Problems Quasi-Newton Matrices and Their use in Limited<br />
Memory Methods”, Lecture Notes in Mathematics, v. 1066, pp. 203-220, Springer,<br />
Berlin, 1984.<br />
[21] HARWELL SUBROUTINE LIBRARY, A catalogue of subroutines (HSL 2000)<br />
AEA Technology, Harwell, Oxfordshire, England, 2002.<br />
[22] HERSKOVITS, J. N. and GOULART, E., “Sparse Quasi-Newton Matrix for Large<br />
Scale Problems in Non-Linear Optimization”. XXV CILAMCE 2004, in CD, Recife,<br />
Brasil, November, 2004.<br />
[23] HERSKOVITS, J. N. and GOULART, E., “Sparse Quasi-Newton Matrices for<br />
Large Scale Non-Linear Optimization” WCSMO6 - 6th World Congress on Structural<br />
and Multidiciplirnary Optimization, in CD, Rio de Janeiro, Brazil, May 2005.<br />
98
[24] HERSKOVITS, J., “A view on Nonlinear Optimization”, J. Herskovits (ed.),<br />
Advances in Structural Optimization, pp. 71-116, Holland, KLUWER Academic<br />
Publishers, June 1995.<br />
[25] HERSKOVITS, J. and SANTOS, G., “Feasible Arc Interior Point Algorithms for<br />
Nonlinear Optimization”. Fourth World Congress on Computational Mechanics, in CD-<br />
ROM, Buenos Aires, Argentina, June, 1998.<br />
[26] HERSKOVITS, J., “A Feasible Directions Interior Point Technique for Nonlinear<br />
Optimization”, JOTA-Journal of Optimization Theory and Aplications, v. 99, pp. 121-<br />
146, October, 1998.<br />
[27] HERSKOVITS, J., MAPPA, P., GOULART, E. and MOTA SOARES, C.M.,<br />
“Mathematical programming models and algorithms for engineering design<br />
optimization”, Journal of Computational Methods in Applied Mechanics and<br />
Engineering, v. 194, pp. 3244-3268, 2005.<br />
[28] HOCK, W. and SCHITTKOVSKI, K., Lecture Notes in Economics and<br />
Mathematical Systems, Berlin, Germany, Springer-Verlag, 1981.<br />
[29] JÚDICE, J.J. e PATRÍCIO,J.M., Sistemas de Equações Lineares , Departamento de<br />
, 1996.<br />
Matemática da Universidade de Coimbra<br />
[30] LUENBERGER, D, G, Linear and Nonlinear Programming. 2 ed. Canada,<br />
Addison Wesley Publishing Company, 1984.<br />
[31] LUKSAN, L. and SPEDICATO, E., “Variable Metric Methods for Unconstrained<br />
Optimization and Nonlinear Least Squares”, Journal of Computational and Applied<br />
Mathematics, v. 124, pp. 61-95, 2000.<br />
[32] MAPPA, P.C., FAIPA_SAND, Uma Técnica para Otimização e Análise<br />
Simultâneas, Tese de D.Sc., COPPE/<strong>UFRJ</strong>, Rio de Janeiro, RJ, Brasil, 2004.<br />
99
[33] MARTINEZ, J. M., “Practical quasi-Newton methods for solving nonlinear<br />
systems”, Journal of Computational and Applied Mathematics, v. 124, pp. 97-121,<br />
2000.<br />
[34] NOCEDAL, J., Large Scale Unconstrained Optimization, in The State of the Art in<br />
Numerical Analysis, pp. 311-338, Oxford University Press, 1997.<br />
[35] NOCEDAL, J. and WRIGHT, S.J., Numerical Optimization, Springer Series in<br />
Operations Research, New York, Springer, 1999.<br />
[36] NOCEDAL, J. and MARAZZI, M., “Wedge trust region methods for derivative<br />
free optimization”, Mathematical Programming, v. 91, n. 2, pp. 289-30, 2002.<br />
[37] TOINT, Ph.L., “On Sparse and Symmetric Matrix Updating Subject to a Linear<br />
Equation”, Mathematics of Computation, v. 31, n. 140, pp. 954-961, Oct. 1977.<br />
[38] TOINT, P.L., “A Sparse Quasi-Newton Update Derived Variattionally With a<br />
Nondiagonally Weighted Frobenius Norm”, Mathematics of Computation, v. 37, n. 156,<br />
pp. 425-433, Oct. 1981.<br />
[39] TOINT, P.L., “A Note About Sparsity Exploiting Quasi-Newton Updates”,<br />
Mathematical Programming, v. 21, pp. 172-181, 1981.<br />
100