Você está na página 1de 7

Nome:WesleyAngelinodeSouza AvaliaoTpicosemOtimizaodeSistemasIII

1.

Dada uma rede radial de distribuio onde foram instalados n capacitores com capacidadesentreaquelaspertencentesaoconjuntoQc:

Para a interpretao do pseudocdigo e da implementao, foi criado o grafo utilizandoalgoritmoporlistadeadjacncia,suaestruturaapresentadadaseguinte forma:

Figura1Exemplodeestruturadografo,utilizandolistadeadjacncia.

Comapropostadestalista,foramcriadasduasestruturasparavincularpropriedadesde nedearcoemlinguagemC,conformeapresentaseaseguir:
// estrutura correspondente a cada n typedef struct item{ int campo; short int nivel; short int mancha; int pai; float P; float Q; float V; float Qc; int C; struct item2* prox; }ITEM; // estrutura correspondente a cada arco typedef struct item2{ int campo; struct item2* prox; float r; float x; }ITEM2; ITEM lista[TOTALNOS+1];

Assimsendo,atravsdaestruturadaFigura1edocdigoacima,mostraqueovetor vertical representa os nse a lista encadeada horizontal as ligaes dos ns com seus filhos (arcos). Outrasestruturasforamutilizadas:
// estrutura correspondente s Potencias em cada n typedef struct potenciano{ int campo; float P; float Q; }POTENCIANO; // estutura de alocao de capacitores typedef struct capacitorbanco{ int no; float Qc; int Cap; }CAPACITOR;

Estas apresentam os valores de potncia em cada n considerando as perdas e a alocaoatualdoscapacitores,respectivamente. Comestasestruturas,tmsealgoritmosparaencontrarosnveis,realizarosclculosdo fluxo de potncias com perdas, entre outros. Estes so necessrios para se compreender o algoritmodebuscalocal.

a) Desenvolva o pseudocdigo representando um algoritmo de busca local para reduodeperdas;


Paraabuscalocal,foiimplementadooalgoritmodevizinhanadesegundaordem,ou seja, um algoritmo no qual se encontra, entre os vizinhos, a melhor alocao de um determinado capacitor, analisando as perdas do sistema. Aps encontrar o melhor vizinho, realizaseabuscalocaldevizinhananovamente,encontrandoassimomelhorpontoparase alocarocapacitoranalisado. Pseudocdigo: 01. BuscaLocal(grafo G) 02. Para cada capacitor, faa 03. no_inicial = no_alocacao_atual_capacitor 04. no_atual = no_alocacao_atual_capacitor 05. Calculo_Fluxo_Potencia(grafo G) 06. Calculo_Perdas(grafo G) 07. perda_menor = perda 08. no_atual = no_pai 09. Repetir 5. E 6. 10. AvaliarPerdaMenor(perda, perda_menor) 11. Para cada filho do no_alocacao_atual_capacitor, faa 12. no_atual = no_filho 13. Repetir 5., 6. e 10. 14. Fim_para 15. Repetir de 04. A 14. 16. Fim_para 17. Retornar o n com perda_menor 18. Fim_BuscaLocal

b) Escrevaumprogramacomputacionalpararesolverabuscalocalpropostanoitem a)
// algoritmo de escolha do melhor ponto de alocao de capacitor // utilizando a busca local por vizinhana de segundo grau void buscalocal(ITEM *lista, POTENCIANO *Potencias){ ITEM2* tmp; double perdas1, perdas2; int c=0, no_ant, no_ant2, aux; int no_inicial=0,no_escolhido=0; for(c=0; c<NUMCAPTOTAL; c++) { if(capacitor[c].Qc) { no_inicial=capacitor[c].no; no_escolhido=capacitor[c].no; FluxoPotenciaComPerdas(lista, Potencias); ImprimirCapacitores(capacitor); perdas1 = perdatotal; no_ant = capacitor[c].no; capacitor[c].no = lista[capacitor[c].no].pai; realocacaocap(lista, capacitor, no_ant, c); FluxoPotenciaComPerdas(lista, Potencias); ImprimirCapacitores(capacitor); perdas2 = perdatotal; if(perdas2 < perdas1) { perdas1 = perdas2; no_escolhido = capacitor[c].no; } no_ant2=capacitor[c].no; capacitor[c].no=no_ant; realocacaocap(lista, capacitor, no_ant2, c); tmp = lista[capacitor[c].no].prox; while (tmp != NULL) { no_ant = capacitor[c].no; capacitor[c].no = tmp->campo; realocacaocap(lista, capacitor, no_ant, c); FluxoPotenciaComPerdas(lista, Potencias); ImprimirCapacitores(capacitor); tmp = tmp->prox; perdas2 = perdatotal; if(perdas2 < perdas1) { perdas1 = perdas2; no_escolhido = capacitor[c].no; } } // busca em segundo grau FluxoPotenciaComPerdas(lista, Potencias); ImprimirCapacitores(capacitor); perdas1 = perdatotal; no_ant = capacitor[c].no; capacitor[c].no = lista[capacitor[c].no].pai;

realocacaocap(lista, capacitor, no_ant, c); FluxoPotenciaComPerdas(lista, Potencias); ImprimirCapacitores(capacitor); perdas2 = perdatotal; if(perdas2 < perdas1) { perdas1 = perdas2; no_escolhido = capacitor[c].no; } no_ant2=capacitor[c].no; capacitor[c].no=no_ant; realocacaocap(lista, capacitor, no_ant2, c); tmp = lista[capacitor[c].no].prox; while (tmp != NULL) { no_ant = capacitor[c].no; capacitor[c].no = tmp->campo; realocacaocap(lista, capacitor, no_ant, c); FluxoPotenciaComPerdas(lista, Potencias); ImprimirCapacitores(capacitor); tmp = tmp->prox; perdas2 = perdatotal; if(perdas2 < perdas1) { perdas1 = perdas2; no_escolhido = capacitor[c].no; } } printf("\n\n--> O capacitor que estava em %d ficara em %d \n\n", no_inicial, no_escolhido); } } }

Aimplementaocompletadoprogramaencontrasejuntoaestaavaliao.

c)

Elaboreanlisederesultadosquecomproveofuncionamentodabuscalocal.
Paraestecaso,foiutilizadaarededeBaranWuemsuaconfiguraoinicialeforam alocadoscapacitoresemdeterminadospontos,conformeapresentaatabelaaseguir: NCapacitor N ValordeQc(KVA) 1 3 120 2 9 60 3 16 60 4 19 45 5 23 30 6 26 15

Tabela1alocaodecapacitoresparaaanlisedoalgoritmo.

Deacordocomoalgoritmo,considerandoatensoem12,66KVePotnciadeBase em10MW,foiencontradoovalordeperdaiguala108,9156.

Com o algoritmo, cada capacitor ser analisado e realizado a busca local por vizinhana de segundo grau, e as novas alocaes, passoapasso, so apresentadas a seguir: 01. Capacitor1 Anlise PosioCapacitor Perda 1 3 108,91563 2 2 109,52541 3 4 107,76405 4 3 108,91563 5 5 107,42228 Novaposiodocapacitor1seraposio5 02. Capacitor2 Anlise PosioCapacitor Perda 1 9 107,42228 2 8 105,39087 3 10 107,36981 4 9 107,42228 5 11 105,34899 Novaposiodocapacitor2seraposio11 03. Capacitor3 Anlise PosioCapacitor Perda 1 16 105,34899 2 15 105,46595 3 17 105,34838 4 16 105,34899 Novaposiodocapacitor3seraposio17 04. Capacitor4 Anlise PosioCapacitor Perda 1 19 105,34899 2 18 105,35223 3 20 105,34737 4 19 105,34838 5 21 105,34701 Novaposiodocapacitor4seraposio21 05. Capacitor5 Anlise PosioCapacitor Perda 1 23 105,34701 2 22 105,35605

3 24 4 105, ,34298 4 23 3 105, ,34701 osiodocap pacitor5ser raposio2 24 Novapo 06. Capacitor6 Anlise e Po osioCapac citor Perd da 1 26 6 105, ,34298 2 25 5 105, ,71355 3 27 7 105, ,16218 4 26 6 105, ,34298 5 28 8 105, ,26497 Novapo osiodocap pacitor6ser raposio2 27 A Aseguiraco omparaoentreaaloca oinicialeanova,aps soalgoritmo odebuscalo ocal NCapacit tor Va alordeQc(K KVA) Nanterior Nap sbusca 1 12 20 3 5 2 60 0 9 11 3 60 0 16 17 4 45 5 19 21 5 30 0 23 24 6 15 5 26 27 V Valordeperdaanterior= =108,91563 N Novovalord deperda=10 05,16218 A Assimsendo o,oalgoritmo odebuscalo ocalajudoun naminimiza odasperd das. 2 Considere 2. earededed distribuio deenergiae eltricarepre esentadape lografomos strado naguraaseguir:

Elabo um proc ore cedimento que indique locais para instalao de chaves associada a uma q a a config guraoder rederadialdemnimasp perdas.

Aassociaodechavestemrelaodiretaaumprocessodeotimizao,poisassociase com a minimizao das perdas por instalao de chaves. Portanto, desejase minimizar as perdas,comrestriesdeumgrafoemformadervore,ouseja,comumanicaraiz,dan associadoaumnicopaiesemaexistnciadeciclos.Paraaconvergnciaimportanteexistir um critrio de parada desejada (funo objetivo) para o algoritmo, pode ser uma perda mnima,porexemplo. Umprocedimentoparaainstalaodechavespodeser: 1. Escolherumaconfiguraodaredeinicialquesejaradial,ouseja,emrvore,dentro daspossibilidadesdechaveamentoeanalisarasperdas,casoafunoobjetivoseja atendida,iraopasso5; 2. Alterararede,inabilitandoumachaveeligandooutra,observandocaractersticasde graforadial; 3. Recalcularasperdasdanovarede; 4. Casoasperdasnososatisfatrias(critriodeparadafunoobjetivo)easperdas somaioresquearedeinicial,restaurararedeeiraopasso2.Seaperdafordentro dodesejado,iraopasso5; 5. Essaredeestemumpontotimo,elaareferncia,iraopasso2,paraverificarse existe uma configurao melhor ainda. Caso esta ltima referncia melhor aps umanovavarredura,estaumasoluotima.

Você também pode gostar