18.04.2013 Views

MATRIZES QUASE-NEWTON ESPARSAS PARA ... - Optimize - UFRJ

MATRIZES QUASE-NEWTON ESPARSAS PARA ... - Optimize - UFRJ

MATRIZES QUASE-NEWTON ESPARSAS PARA ... - Optimize - UFRJ

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!