Você está na página 1de 16

ESTUDO E APLICAO DE TCNICAS DE ESPARSIDADE NA PROGRAMAO

ORIENTADA A OBJETO E VIABILIDADE PRTICA DE SUA UTILIZAO EM


PROGRAMA PARA ANLISE DE FLUXO DE CARGA

Andrey da Costa Lopes
Wellington Alex dos Santos Fonseca
Ghendy Cardoso Jnior
Edgar Modesto Amazonas Filho
Jos Adolfo da Silva Sena

andreycl@ufpa.br
wasf@ufpa.br
ghendy@ufpa.br
edgar@ufpa.br
adolfo.sena@ig.com.br

Departamento de Engenharia Eltrica e da Computao, Universidade Federal do Par.
NESC Ncleo de Energia, Sistemas e Comunicao.
GSEI Grupo de Engenharia em Sistemas Eltricos e Instrumentao.
Av. Augusto Corra, n.1, 66.075-900, Belm - PA Brasil

Resumo. Em geral, as matrizes utilizadas na anlise de Sistemas Eltricos de Potncia (SEP)
possuem o nmero de elementos nulos bem maior que o nmero de elementos no-nulos,
como por exemplo, a matriz Jacobiana e a matriz de Admitncia Nodal da rede eltrica
(matrizes esparsas). Nas operaes aritmticas envolvendo matrizes esparsas de dimenses
elevadas torna-se ineficiente e freqentemente impossvel alocar espao em memria para
todos os seus elementos. Caso seja alocado espao suficiente para tal armazenamento em
memria computacional, poderia ser inadequado, em tempo de mquina, executar todos os
laos iterativos a procura de elementos no-nulos dentro da matriz. Obviamente algum tipo
de esquema de armazenamento requerido, um que armazene s elementos no-nulos da
matriz com informaes auxiliares suficientes para determinar a posio de um elemento e
sua utilizao em operaes matriciais. Cada tipo de armazenamento introduz uma maior ou
menor dificuldade no acesso imediato destes dados, portanto, de nada valeria um
armazenamento compacto se os algoritmos de leitura e execuo dos dados armazenados no
so capazes de executar suas funes de maneira eficiente. A partir do exposto, este trabalho
tem por objetivo o desenvolvimento de algoritmos eficientes capazes de realizar as principais
operaes com matrizes esparsas aplicadas aos SEP. Para tanto estes algoritmos so
desenvolvidos com o uso de tcnicas de esparsidade englobando desde o esquema de
armazenamento Representao Completa e Ordenada por Comprimento de Linha (RCOCL)
at a ordenao de Tinney, e suas respectivas implementaes utilizando conceitos de
Programao Orientada a Objeto (POO).

Palavras-Chave: Programao Orientada a Objeto, Matrizes Esparsas, Sistemas Eltrico de
Potncia, Operaes Matriciais.
1. INTRODUO

No planejamento e na operao de SEP muito comum a utilizao de matrizes para
representar a rede eltrica em softwares de simulao, cabendo destacar: Fluxo de Carga,
Curto-circuito, Estimador de Estados, Anlise de Estabilidade Dinmica e Transitria, entre
outros.
O maior componente computacional nos clculos de redes eltricas a soluo de
equaes matriciais, cujas matrizes so geralmente esparsas (possuem grande quantidade de
elementos nulos). Assim, tcnicas de esparsidade tm se mostrado favorvel ao
desenvolvimento de mtodos de soluo.
O princpio bsico das tcnicas de esparsidade resume-se em mtodos que visam
preservar a esparsidade, minimizar a quantidade de dados armazenados, assim como o
nmero de operaes realizadas sobre matrizes esparsas e/ou vetores esparsos.
A Programao Orientada a Objeto tem sido aceita na engenharia de Sistemas de
Potncia como uma alternativa vivel tradicional programao procedural. Recentemente, as
bibliotecas orientadas a objeto, desenvolvidas para matrizes esparsas, tm recebido ateno
significativa de pesquisadores na rea da engenharia e cincia da computao (Pandit et al.,
2001).
Diante disso, proposto, no presente trabalho, a descrio e implementao de uma
classe de matrizes esparsas em C++.
Os resultados desta pesquisa culminam no desenvolvimento das classes SMatriz e
SVetor, implementadas em linguagem C++, que proporcionam bom desempenho, boa
alocao de memria, baixa complexidade e boa legibilidade para aplicaes envolvendo
operaes com matrizes que apresentam grau de esparsidade significativo (Lopes & Fonseca,
2005).
O presente estudo, alm dos aspectos tericos citados anteriormente, e dos algoritmos
implementados, utilizando os recursos de Programao Orientada a Objeto, objetiva
apresentar os resultados de testes realizados com as rotinas desenvolvidas.
Tais resultados so bastante satisfatrios em termos de desempenho quando aplicado ao
Fluxo de Carga, em sistemas de grande porte. A escolha do Fluxo de Carga para testar a
eficincia dos algoritmos implementados deve-se ao elevado grau de esparsidade das matrizes
envolvidas e por seus algoritmos serem ricos em operaes com matrizes esparsas.
O bom desempenho proporcionado ao programa de anlise de Fluxo de Carga, quando
aplicado para os casos base de redes eltricas IEEE 118 e IEEE 300 barras, confirma a
viabilidade prtica da proposta do presente trabalho. Apesar do foco dado s aplicaes em
SEP, as rotinas so tambm aplicveis a qualquer tipo de estrutura de matriz esparsa, podendo
ser usadas em outras reas de pesquisa que envolvam operaes com matrizes esparsas de
grande porte, sejam estas de ordem quadrada ou no.

2. ESQUEMA DE ARMAZENAMENTO COMPACTO ADOTADO PARA
MATRIZES ESPARAS

Existem muitos esquemas propostos para o armazenamento de matrizes esparsas
considerando matrizes simtricas e assimtricas. Alguns apresentam facilidades para
alteraes em seus elementos enquanto que outros apresentam facilidades para operaes
utilizando as matrizes. Portanto, para cada esquema a eficincia difere de acordo com a
aplicao.
A escolha do esquema de armazenamento a ser utilizado depende do problema que se
quer resolver. A eficincia da resoluo do problema pode variar em funo do esquema
utilizado.
No presente trabalho, adotou-se o esquema de armazenamento Representao Completa e
Ordenada por Comprimento de Linha (Gustavson, 1978).

2.1 Armazenamento RCOCL (Representao Completa e Ordenada por Comprimento
de Linha)

Considera-se uma matriz de ordem m n. O esquema RCOCL composto de trs
arranjos unidimensionais:

ija[k] que armazenar os ndices j de coluna dos elementos no-nulos ordenados por
linha e dentro de cada linha ordenados por colunas;
sa[k] que armazenar os elementos no-nulos da matriz ordenados por linha e dentro
de cada linha ordenados por colunas;
index[i] que armazenar os ndices que determinam o incio das informaes
referentes as linhas de ndice i nos arranjos ija[k] e sa[k], com i {1, 2, ..., n, n+1}.

Para exemplificar o uso do esquema RCOCL, considere a matriz A dada pela Figura 1.

(
(
(
(
(
(

=
5 6 0 0 0
2 0 0 0 0
0 9 5 7 0
0 0 0 4 0
0 0 1 0 3
A
Figura 1 - Matriz quadrada de ordem 55.

Para o esquema RCOCL, tem-se o armazenamento compacto da matriz dado pela Tabela
1.

Tabela 1. Armazenamento compacto usando o esquema RCOCL.

ndice k 1 2 3 4 5 6 7 8 9
ija[k] 1 3 2 2 3 4 5 4 5
sa[k] 3 1 4 7 5 9 2 6 5
ndice i 1 2 3 4 5 6
Index[i] = k 1 3 4 7 8 10

Convm ressaltar que o armazenamento RCOCL por natureza estrutural, ou seja, por
indexar as linhas da matriz, torna-se mais eficiente, em termos de armazenamento, quanto
maior for o nmero de colunas em relao s de linhas, pois o arranjo index diminui. Por
exemplo, para uma matriz esparsa de 17000, tem-se o tamanho de index igual a 2 e o
tamanho de sa e ija dependentes do grau de esparsidade.
Como os arranjos ija, sa e index no contm nenhuma informao das dimenses da
matriz, so necessrias, em termos de implementao, variveis adicionais para conter tais
informaes:
numlin que armazenar o nmero de linhas;
numcol que armazenar o nmero de colunas.

Durante o processamento dos dados e as operaes matriciais muitos elementos
assumiro valores absolutos muito prximos de zero (exemplo: 0,999999x10
-25
). Estes valores
sendo diferente de zero passam a ser armazenados e processados nas operaes, ocasionando,
progressivamente, um mau desempenho. Com o objetivo de eliminar o armazenamento e
processamento de valores muito prximos de zero defini-se mais uma varivel.

limiar que armazenar um valor real positivo. Se o valor absoluto do elemento da
matriz ou resultante de uma operao for menor que limiar este valor considerado
nulo.

O esquema RCOCL e as variveis auxiliares montam a seguinte estrutura de dados para
matrizes esparsas de ordem m n:

O valor de numlin m;
O valor de numcol n;
Nenhum elemento de valor absoluto menor que limiar armazenado e processado.
Os elementos no-nulos da linha i esto em sa[k] onde index[i] k index[i+1]-1;
O comprimento do arranjo index numlin+1;
O comprimento dos arranjos ija e sa so iguais a index[numlin+1]-1.

2.2 Armazenamento para Vetores Esparsos: RCOCV (Representao Completa e
Ordenada por Comprimento de Vetor)

A multiplicao e a soluo de sistemas lineares executam operaes lineares sobre suas
linhas. Estas operaes lineares geralmente so executadas por sub-rotinas cujos argumentos
so as linhas esparsas da matriz. Para tanto, pode-se usar a orientao a objeto para
sobrecarregar as sub-rotinas de operaes lineares nos operadores matemticos e dar origem a
um objeto para vetores esparsos cujos elementos podem ser os elementos de uma linha da
matriz esparsa. No entanto o objeto para vetores esparsos deve dispor de um modo de
armazenamento. Este modo de armazenamento uma extenso do modo RCOCL que aqui se
denomina de RCOCV (Lopes & Fonseca, 2005).
O esquema RCOCV monta dois arranjos unidimensionais e duas variveis auxiliares:

ija[k] que armazenar em ordem crescente os ndices j dos elementos no-nulos.
sa[k] que armazenar os elementos no-nulos do vetor na ordem crescente de seus
ndices j.
kov que armazenar o ndice que determina o incio das informaes referentes aos
elementos do vetor.
kfv que armazenar o ndice que determina o fim das informaes referentes aos
elementos do vetor.

Observe que o modo de armazenamento para vetores esparsos extremamente
semelhante ao modo de armazenamento por linha indexada para matrizes esparsas. Isto
facilita na elaborao dos algoritmos de transferncia de elementos de uma linha de uma
matriz com armazenamento RCOCL para um vetor esparso com armazenamento RCOCV.
Como exemplo, considere a matriz B de ordem 4 7, dada pela Fig. 2.

(
(
(
(

=
2 0 0 0 0 0 0
0 0 0 9 5 7 0
1 0 0 0 0 4 0
0 3 0 0 1 0 3
B
Figura 2 - Matriz de ordem 47.

Para o esquema RCOCL, tem-se a Tabela 2 para o armazenamento compacto da matriz
B.

Tabela 2. Armazenamento compacto da matriz B utilizando o esquema RCOCL.

ndice k 1 2 3 4 5 6 7 8 9
ija[k] 1 3 6 2 7 2 3 4 7
sa[k] 3 1 3 4 1 7 5 9 2
ndice i 1 2 3 4 5
index[i] = k 1 4 6 9 10

Portanto, para o armazenamento compacto da segunda linha da matriz B no esquema
RCOCV tem-se a Tabela 3, onde kov = 1 e kfv = index[2+1] - index[2].

Tabela 3. Armazenamento compacto da segunda linha da matriz B, utilizando o esquema
RCOLV.

ndice k 1 2
ija[k] 2 7
sa[k] 4 1

A principal vantagem do esquema RCOCV a possibilidade de utilizar os endereos de
memria (ponteiros) do esquema RCOCL no momento em que as operaes lineares da
multiplicao e soluo de sistemas lineares so executadas. A Tabela 4 ilustra o
armazenamento RCOCV usando (atravs de ponteiros) os arranjos ija e sa do esquema
RCOCL.

Tabela 4. Armazenamento compacto da segunda linha da matriz B, utilizando o esquema
RCOLV.

ndices 1 2 3 4 5 6 7 8 9
ija[k] 1 3 6 2 7 2 3 4 7
sa[k]
3 1 3 4 1 7 5 9 2
Kov index[i]

Kof index[i+1]-1


Como os arranjos ija, sa e as variveis kof e kfv no contm nenhuma informao da
dimenso do vetor, defini-se a varivel:

tamanho que armazenar a dimenso do vetor.

Com o objetivo de eliminar o armazenamento e processamento de valores muito
prximos de zero define-se mais uma varivel:

limiar que armazenar um valor real positivo. Se o valor absoluto do elemento do
vetor resultante de uma operao vetorial for menor que limiar este valor
considerado nulo.

3. TCNICA ADOTADA PARA PRESERVAR A ESPARSIDADE

Uma das operaes envolvendo matrizes esparsas que merece certa ateno especial a
soluo de um sistema de equaes algbricas lineares definidas na forma matricial pela
Eq.(1).

b x A = (1)
b A x =
1
(2)

Como a inversa da matriz A, na maioria das situaes, no esparsa, solucionar a Eq. (1)
atravs da Eq. (2) contraria as tcnicas de esparsidade.
Um processo adequado para solucionar tal equao seria o processo de eliminao de
variveis (realizao de combinaes lineares entre equaes) para a obteno da soluo do
problema sem a necessidade de se inverter a matriz de coeficientes. Este processo chamado
de Eliminao de Gauss (EG), fatorao triangular ou triangularizao (Monticelli, 1983).
Durante o processo de Eliminao de Gauss, podem aparecer elementos no-nulos em
determinadas posies de uma linha, onde, antes, havia elementos nulos. Estes novos
elementos so chamados de fill-ins, e podem corromper o desempenho das operaes
envolvendo matrizes esparsas. Uma forma de contornar esse problema seria aplicar as
tcnicas de ordenao.

3.1 Ordenao

A ordenao definida como o processo pelo qual se escolhe uma seqncia de
eliminao que ser til para atingir um determinado objetivo. Neste caso especificamente, a
diminuio do nmero de elementos no-nulos que apareciam numa EG convencional.
A escolha de uma seqncia adequada de eliminao garante a esparsidade e como
conseqncia minimiza o armazenamento de informaes e diminui o nmero de operaes
aritmticas (o que diminui os erros de arredondamento).
Pode-se diminuir o nmero de fill-ins gerados no processo de fatorao trocando posies
de linhas e colunas da matriz. Isto equivale a renumerar os ns do circuito.
Existem basicamente trs esquemas de ordenao que so aplicados de acordo com o tipo
de processamento e/ou topologia do sistema (Tinney & Walker, 1967):

Esquema I Fatorar a matriz na ordem inversa do grau dos ns, ou seja, as colunas
ou linhas com menos elementos (na matriz original) devem ser fatoradas primeiro;
Esquema II A cada passo do procedimento de eliminao, a prxima linha ou
coluna a ser fatorada aquela que tiver o menor nmero de elementos naquele estgio
da fatorao;
Esquema III Em cada estgio simula-se a fatorao de todas as colunas ou linhas
restantes e toma-se aquela que gerar o menor nmero de fill-ins.

Para o trabalho proposto, adotou-se o Esquema I, pois apesar de ser esttico, no define
uma nova ordem de fatorao durante a eliminao de Gauss. O Esquema II efetua para cada
operao elementar da eliminao de Gauss uma nova ordem de fatorao. Entretanto, para o
esquema RCOCL ter-se-ia que ordenar a matriz para cada operao elementar da eliminao
de Gauss o que provocaria uma perda de desempenho significativa. O Esquema III consegue
prever qual linha introduzir menos elementos no processo. No entanto, exigiria vrias
simulaes de ordenao da matriz o que o torna invivel (Lopes & Fonseca, 2005).
De forma a ilustrar a importncia da ordenao, a Fig. 3 apresenta duas estruturas
matriciais de grande porte, uma sem ordenao e outra ordenada com o esquema proposto.
Aplicando-se o processo de Eliminao de Gauss tm-se as matrizes da Fig. 4.
Observando-se a matriz da Fig. 4a nota-se o surgimento de fill-ins em grande quantidade,
destruindo praticamente a estrutura esparsa da matriz e, consequentemente, comprometendo o
desempenho dos algoritmos. Ao contrrio desta, a matriz apresentada na Fig. 4b, com
ordenao, geram poucos fill-ins.


Figura 3 - Estrutura da matriz jacobiana para o caso IEEE 300 barras: (a) sem ordenao, (b)
com ordenao.


Figura 4 - Fatorao U (LU) para a matriz jacobiana do caso IEEE 300: (a) sem ordenao,
(b) ordenao.

4. DEFINIO DAS CLASSES SMatriz PARA MATRIZES ESPARSAS E SVetor
PARA VETORES ESPARSOS

Neste tpico abordado uma definio simplificada das Classes SMatriz e SVetor, onde
esto implementadas as operaes envolvendo matrizes e vetores esparsos.
A declarao destas operaes utiliza a sobrecarga de operadores que permite o programa
cliente utilizar as notaes e idias usuais de operaes matriciais.
A partir do esquema de armazenamento RCOCL e de suas variveis auxiliares j
definidas tem-se na Fig. 5 a definio da classe SMatriz, na forma de diagrama de classe,
onde se mostra as declaraes dos atributos e funes membros.


Figura 5 - Definio da interface da classe SMatriz.

Observe que os atributos da classe SMatriz so as variveis de ponteiros para os arranjos
sa, ija e index, e as variveis auxiliares numlin, numcol e limiar.
Para o esquema RCOCV e suas variveis auxiliares tem-se na Fig. 6 a definio da classe
SVetor, mostrando as declaraes dos atributos e das funes membro.


Figura 6 - Definio da interface da classe SVetor.

5. OPERAES COM MATRIZES ESPARSAS PARA O ESQUEMA RCOCL

Para que os algoritmos de operaes com matrizes esparsas atinjam um bom desempenho
de fundamental importncia que o modo de armazenamento utilizado permita o uso
adequado dos recursos disponveis na linguagem de implementao. Para um entendimento
melhor do que seria uma boa interao entre o algoritmo e o modo de armazenamento,
considere a multiplicao de duas matrizes esparsas de grandes dimenses e que o tipo de
armazenamento seja o RCOCL. Para que o algoritmo apresente bom desempenho preciso
que o mesmo acesse o espao de armazenamento por linha (e no por coluna), processe os
dados por linha (e no por coluna), e armazene os resultados por linha (e no por coluna).
Das exigncias mencionadas e pela indisponibilidade de algoritmos para operaes
matriciais esparsas com armazenamento RCOCL, foram desenvolvidas neste trabalho novas
abordagens para o desenvolvimento destes algoritmos.

5.1 Transposio de Matrizes Esparsas

Transpor a matriz A de ordem m n cujo armazenamento o esquema RCOCL o
equivalente a imaginar a matriz A armazenada pelo esquema RCOCC (Representao
Completa e Ordenada por Comprimento de Coluna).
A diferena deste tipo de armazenamento que os arranjos de ija e sa apresentam seus
elementos ordenados por coluna e dentro de cada coluna, ordenados por linha, e os valores
inteiros no arranjo index passam a indicar os ndices correspondentes ao incio das
informaes em ija e sa referente s colunas da matriz esparsa. Os valores das variveis
numlin e numcol so permutados, enquanto o valor da varivel limiar preservado.
Com esta idia em mente, a determinao do objeto T do tipo SMatriz contendo a
transposta do objeto A do tipo SMatriz consiste de forma simplificada nas seguintes linha de
cdigo:


SMAtriz &transp( const SMatriz &A ) {
SMatriz T(); // instncia do objeto T (transposta de A)
int pos = new int[A.numcol+2];
T.numlin = A.numcol; // atribuio das variveis auxiliares
T.numcol = A.numlin; // atribuio das variveis auxiliares
T.limiar = A.limiar; // atribuio das variveis auxiliares

// bloco do algoritmo de transposio
for ( int ka=1; ka <= A.index[A.numlin+1]; ka++ )
T.index[A.ija[ka]+1]++;
pos[i]= 1;

for ( int i=2; I <= A.index[A.numlin+1]-1; i++)
pos[i] = T.index[i]= T.index[i-1]+T.index[i]-1;

for ( int j=1; j <= A.numlin; j++ ) {
int kaf= A.index[j+1]-1;
for ( ka = A.index[j]; ka <= kaf; ka++ ) {
kt= pos[A.ija[ka]]++;
T.sa[kt]= A.sa[ka];
T.ija[kt]= j;
}
return T;
}


5.2 Multiplicao de Matrizes Esparsas

Preliminarmente ser mostrada a interpretao usual da operao de multiplicao e
posteriormente o modo de interpretao da mesma operao por meio de leitura e
armazenamento por linha.
Dada a matriz A, de ordem n p , e a matriz B, de ordem p m , define-se a matriz
produto C de ordem n m como:

A B C = (3)

Onde


1
p
ij ik kj
k
c a b
=
=

(4)

O elemento
ij
c , usualmente, interpretado como o produto da linha i de A pela coluna j
de B. Esta interpretao no satisfatria para a operao com o esquema RCOCL, visto que
a operao de leitura da coluna j de B no compatvel com o armazenamento. Da a
necessidade de uma outra interpretao.
Ser definida a linha i de C como

[ ]
1 2 i i i im
C c c c = L (5)

e a linha k de B como

[ ]
1 2 k k k km
B b b b = L (6)

Aplicando-se a Eq. (4) na Eq. (5), tem-se:

[ ]
1 2
1
p
i ik k k km
k
C a b b b
=
=

L (7)

Substituindo, [ ]
1 2 k k km
b b b L pela Eq. (6) tem-se:


1
p
i ik k
k
C a B
=
=

(8)

Nesta expresso a linha i de C,
i
C , a somatria do produto das linhas k de B,
k
B , pelos
elementos da linha i de A,
ik
a . Observe que as operaes e o resultado so por linha e,
portanto, timas para o esquema RCOCL.
Definindo ( ) C i e ( ) B k como objetos da classe SVetor contendo os elementos no-nulos,
respectivamente, de
i
C e
k
B e considerando A como objeto da classe SMatriz tem-se:


. [ ]
. [ ]
ik
a Asa ka
k Aija ka
=

(9)

onde . [ ] . [ 1] 1 Aindex i ka Aindex i +

Substituindo a Eq. (9) na Eq. (8) tem-se:

[ ] [ ]
[ ]
[ ] . 1 1
.
( ) . ( . )
A index i
ka A index i
C i Asa ka B Aija ka
+
=
=

(10)

Esta expresso a essncia do desempenho e legibilidade do algoritmo de multiplicao
de matrizes esparsas com esquema RCOCL.
O cdigo fonte em C++ da operao de multiplicao dos objetos A e B do tipo SMatriz
(Lopes & Fonseca, 2005) :


SMatriz & operator*( const &A, const &B ) {
SMatriz C(); // instncia do objeto C ( C = A*B )
SVetor V0(); // instncia do objeto V0
C.numlin = A.numlin; // atribuio das variveis auxiliares
C.numcol = B.numcol; // atribuio das variveis auxiliares
C.limiar = A.limiar; // atribuio das variveis auxiliares

// bloco do algoritmo de transposio
for ( int i=1; i <= A.numlin; i++ ) {
V0.kfv = 0; // Faz o vetor V0 ter todos os elementos nulos
for ( int ka=A.index[i]; ka <= A.index[i+1]-1; ka++)
V0 = V0 + A.sa[ka]*B( A.ija[ka] );
// insere V0 na linha i da matriz C
int km = C.index[i];
for ( int kv=V0.kov; kv<=V0.kfv; kv++; km++) {
C.ija[km] = V0.ija[kv];
C.sa[km] = V0.sa[kv];
}
C.index[i+1]=km;
}
return C;
}


6. APLICAO DAS TCNICAS DE ESPARSIDADES NO ESTUDO DE FLUXO
DE CARGA

Neste item, abordado um estudo comparativo do desempenho das tcnicas de
esparsidade na simulao de um fluxo de carga. Esta simulao considera o sistema IEEE
14, 118 e 300 barras, utilizando uma estrutura de matrizes no formato convencional e outra no
formato esparso. Os testes foram desenvolvidos em um microcomputador AMD Duron XP
1100MHz, com 247 MB de memria RAM.
A idia bsica do Fluxo de Carga a obteno das condies de operao (tenses, fluxos
de potncia) de uma rede eltrica em funo de sua topologia e dos nveis de demanda e
gerao de potncia.
A tcnica de soluo utilizada para o fluxo de carga o Mtodo de Newton-Raphson
Completo, sendo este mtodo universalmente aceito (Brown, 1977). Geralmente a matriz
admitncia esparsa sendo esta esparsidade conservada na matriz Jacobiana, o que facilita a
soluo do problema por meio de utilizao de tcnicas de esparsidade.
O programa foi desenvolvido com base nos recursos de programao orientada a objeto e,
portanto, instancia variveis que so objetos de classes, para uma estrutura de dados de vetor
de nmeros complexos e outra para uma matriz genrica, podendo ser tanto convencional ou
desenvolvida com recursos de esparsidade. Diante disso, as operaes matemticas matriciais
e vetoriais esto encapsuladas na forma de sobrecarga de operadores, ou seja, funes cujos
algoritmos desenvolvem determinadas operaes matemticas e que tem como nome o
caractere que simboliza determinado operador matemtico.

6.1 Teste das Rotinas desenvolvidas

Neste tpico apresentado um teste particular para trs casos de rede-teste padro, ou
seja, os padres IEEE 14 barras, IEEE 118 barras e IEEE 300 barras.
Utilizando o software de fluxo de carga citado anteriormente, foram utilizados dois tipos
de estruturas de dados para os testes. Um dos testes foi realizado com uma classe para
matrizes sem recursos de esparsidade, ou seja, sua implementao obedecia lgebra
convencional de matrizes. O outro teste foi realizado com a classe de esparsidade
desenvolvida nesse trabalho.
Como resultado extraiu-se o nmero de iteraes e seus respectivos mismatch de potncia
para os casos IEEE 118 e 300 barras. Os resultados esto expostos nos grficos da Fig. 7.



Figura 7 Comparao do mismatch para as rotinas com e sem tcnicas de esparsidade. A
convergncia do Fluxo de Carga para os casos: (a) IEEE 118, (b) IEEE 300.

Nota-se, pelos grficos das Figs. 7a e 7b, a convergncia quadrtica do fluxo de carga
atravs dos mismatch de potncia, comportamento este previsto para o mtodo de Newton
completo. Nota-se tambm atravs desses grficos que os valores numricos, em termos de
comparao, tanto para os casos com esparsidade assim como sem esparsidade so
semelhantes.
Utilizando-se os mesmos procedimentos citados anteriormente fez-se um teste
comparativo para validao numrica do resultado das operaes matriciais presente no fluxo
de carga.
Os testes comparativos foram feitos para o caso IEEE 14 barras, obtendo-se como
resultado do fluxo de carga os valores dos mdulos das tenses e ngulo de fase para cada
barra. Tais resultados so mostrados graficamente nas Figs 8 e 9.


Figura 8 - Valores comparativos dos mdulos das tenses para o caso IEEE 14 barras.


Figura 9 - Valores comparativos dos ngulos de fase das tenses para o caso IEEE 14 barras.

Mais uma vez nota-se a aproximao numrica entre os valores para os casos simulados
com esparsidade e sem esparsidade, o que valida os algoritmos desenvolvidos para
esparsidade.
Outro tipo de teste realizado foi analisar o desempenho quanto ao tempo de
processamento dos algoritmos. Os testes comparativos foram feitos para os casos IEEE 118 e
300 barras, obtendo-se como resultado os valores de tempo de processamento total do Fluxo
de Carga e o tempo de soluo do sistema linear para a matriz jacobiana, em cada iterao do
Fluxo de Carga.
Os resultados de medio de tempo esto expostos nas Figs. 10, 11a e 11b. Neste caso, o
procedimento de medio se deu durante a execuo do programa, usando a seguinte linha de
cdigo em C++:

#include <time.h>

void void( void ) {
clock_t T_inicio, T_fim;
T_inicio = clock();
// Intervalo de cdigo do programa a ser mensurado
...
// Intervalo de cdigo do programa a ser mensurado
T_fim = clock();
cout << O tempo de medio foi de << ( double ) ( T_fim T_inicio
) / CLOCKS_PER_SEC << seg << endl;
}



Figura 10 - Tempo total de execuo do programa de Fluxo de Carga

Observando o grfico da Fig. 10, nota-se uma diferena bastante significativa do tempo
de processamento total do Fluxo de Carga para os casos IEEE 118 e 300 barras, onde para o
Fluxo de Carga com as rotinas de esparsidade o tempo bem menor em relao s sem
esparsidade.
Para o algoritmo sem esparsidade observa-se que a diferena de tempo entre o caso IEEE
300 e 118 barras cerca de cem vezes maior, o que refora a aplicao de tcnicas de
esparsidade para minimizar este crescimento bastante elevado de tempo de processamento.


Figura 11 - Tempo de processamento da soluo do sistema linear da jacobiana para cada
iterao, com e sem esparsidade para os casos: (a) IEEE 118 barras, (b) IEEE 300 barras.

Observando os grficos das Figs. 11a e 11b, nota-se que os valores de tempo de
processamento para todas as iteraes mantm-se aproximadamente na mesma faixa de
valores, devido estrutura da jacobiana no mudar a cada iterao em termos de grau de
esparsidade e dimenso.
Comparando os grficos das Figs. 11a e 11b, nota-se que os resultados j comeam a ser
bastante significativos quando simulado o Fluxo de Carga para o caso IEEE 300 barras, onde
se trabalha com matrizes de grau de esparsidade e ordem de grandeza maior em relao ao
caso IEEE 118 barras.
Diante disso, fica clara a validade de aplicao dos mtodos abordados, em um processo
onde preciso e rapidez nas respostas so fatores determinantes de um bom desempenho.

7. CONCLUSO

Neste trabalho foram desenvolvidos estudos e aplicaes com tcnicas de esparsidade na
Programao Orientada a Objeto, enfocando-se o esquema de armazenamento compacto
intitulado Representao Completa e Ordenada por Comprimento de Linha (RCOCL), bem
como sua viabilidade prtica de utilizao em programas de Fluxo de Carga. Os resultados
desta pesquisa culminam no desenvolvimento das classes SMatriz e SVetor que proporcionam
bom desempenho, boa alocao de memria, baixa complexidade e boa legibilidade para
aplicaes envolvendo operaes com matrizes com grau de esparsidade significativo. O bom
desempenho proporcionado ao programa de anlise de Fluxo de Carga para os casos IEEE
118 e IEEE 300 confirma a viabilidade prtica da proposta apresentada no presente trabalho.
A Programao Orientada a Objeto agrega aos algoritmos de operaes com matrizes
esparsas a reutilizao de software e a tendncia de se desenvolver software de maneira mais
compreensvel, organizada e mais fcil de se manter, modificar e depurar.
Por ltimo destaca-se que o aproveitamento da esparsidade de matrizes que descrevem
um sistema de potncia se constituiu um dos principais objetivos da aplicao das rotinas
desenvolvidas no estudo destes sistemas. Apesar do foco dado aos sistemas de potncia as
rotinas so tambm aplicveis a qualquer tipo de estrutura de matriz esparsa, podendo ser
usadas em outros campos de pesquisa que envolvam operaes com matrizes esparsas.


REFERNCIAS

Brown, H., E., 1977. Grandes Sistemas Eltricos: Mtodos Matriciais. Rio de Janeiro: LTC.

Deitel, H. M.& Deitel, P. J., 2001. C++ Como Programar. Bookman.

Gustavson, F., G., 1978. Two Fast Algorithms for Sparse Matrices: Multiplication and
Permuted Transposition, ACM Transactions on Mathematical Software, vol. 4, n. 3, pp.
250-269 (September).

Lopes, A., C., & Fonseca, W., A., S, 2005. Estudo e Aplicao de Tcnicas de Esparsidade
na Programao Orientada a Objeto e Viabilidade Prtica de sua Utilizao em
Programa para Anlise de Fluxo de Carga. Monografia de Concluso de Curso de
Graduao em Engenharia Eltrica, Universidade Federal do Par.

Monticelli, A., 1983. Fluxo de Carga em Redes de Energia Eltrica, Editora Edgard Blcher
LTDA, So Paulo.

Pandit, S.; Soman, S. A; Khaparde, S. A., 2001. Design of Generic Direct Sparse Linear
System Solver in C++ for Power System Analysis. IEEE Transactions on Power Systems,
16(4), pp. 647-652.

Tinney, W., F., & Walker, J., M., 1967. Direct Solutions of Sparse Network Equations by
Optimally Ordered Triangular Factorizations. Proc. IEEE, 55. pp. 1801-1809.

Você também pode gostar