Implementação de Reconfiguração de Redes de Distribuição em Matlab com Diferentes Algoritmos

1. Framework de Programação Cônica de Segunda Ordem (SOCP)

Modelagem Matemática

cvx_begin
    variables estado_chave(num_ramos) % 0-desligado, 1-ligado
    variable Perda_Total
    minimize Perda_Total + fator_penalidade * sum(estado_chave)
    subject to
        [Tensao, Corrente] = fluxo_potencia(barra, ramo, estado_chave);
        Perda_Total == sum(real(Tensao .* conj(Corrente)));
        Matriz_Adjacencia * estado_chave == vetor_conectividade;
        Tensao_min <= Tensao <= Tensao_max;
cvx_end

Parâmetros:

  • fator_penalidade: Coeficiente de penalização (10-100)
  • Matriz_Adjacencia: Matriz de conectividade topológica

Configuração do Solucionador

opcoes = sdpsettings('solver', 'cplex', 'usex0', true);
cvx_solver(opcoes);

2. Algoritmo Binário de Enxame de Partículas (BPSO)

Inicialização

num_particulas = 50;  
iter_max = 200;      
inercia = 0.9;       
cognitivo = 2;        
social = 2;

Função de Aptidão

function aptidao = funcao_objetivo(estado, barra, ramo)
    [Tensao, Corrente] = fluxo_potencia(barra, ramo, estado);
    Perda_Ativa = sum(real(Tensao .* conj(Corrente)));
    Desvio = max(abs(Tensao - 1.0), [], 2);
    penalizacao = 1000 * sum(Desvio);
    aptidao = Perda_Ativa + penalizacao;
end

Loop Principal

posicoes = randi([0,1], num_particulas, num_ramos);
for ciclo = 1:iter_max
    velocidade = inercia * velocidade + rand() * cognitivo * (melhor_local - posicoes) + rand() * social * (melhor_global - posicoes);
    probabilidade = 1./(1 + exp(-velocidade));
    posicoes(probabilidade < 0.1) = 0; 
    posicoes(probabilidade > 0.9) = 1;
    for i = 1:num_particulas
        desempenho(i) = funcao_objetivo(posicoes(i,:), barra, ramo);
    end
    [~, id] = min(desempenho);
    if desempenho(id) < melhor_global_valor
        melhor_global = posicoes(id,:);
    end
end

3. Abordagem Multiobjetivo com NSGA-II

Funções Objetivo

objetivo1 = @(estado) sum(real(Tensao.^2 .* Resistencia)); 
objetivo2 = @(estado) max(abs(Tensao - 1.0));

Configuração do Algoritmo

config = optimoptions('gamultiobj',...
    'PopulationSize', 100,...
    'CrossoverFraction', 0.8,...
    'MutationRate', 0.1,...
    'ParetoFraction', 0.35);

Visualização de Resultados

[solucao, valores] = gamultiobj(@(estado)[objetivo1(estado); objetivo2(estado)], num_ramos, [], [], [], [], lim_inf, lim_sup, config);
plot(valores(:,1), valores(:,2), 'o');
xlabel('Perda de Potência (kW)'); 
ylabel('Desvio de Tensão (%)');

4. Configuração do Caso IEEE 33

Parâmetros da Rede

barra = struct(...
    'Carga' = [0, 100, 120, ...],  
    'Admitancia' = [0.02, 0.01, ...],  
    'Tensao_Base' = 1.05);          

ramo = struct(...
    'Resistencia' = [0.02, 0.04, ...],  
    'Reatancia' = [0.06, 0.12, ...],  
    'Tap' = 1.0);

Análise de Convergência

plot(1:ciclos, historico_perdas, 'r', 1:ciclos, historico_tensao, 'b');
legend('Evolução das Perdas', 'Desvio de Tensão');

5. Técnicas de Otimização

Validação Topológica

function valido = verifica_topologia(estado, ramo)
    chaves_abertas = find(estado==0);
    G = graph(chaves_abertas);
    valido = isTree(G);
end

Aceleração Computacional

  • Processamento paralelo com parfor
  • Inicialização por agrupamento K-means

Cenários Dinâmicos

Perda_Ativa = sum(interp1(tempo_carga, carga_potencia, t_atual) .* real(Tensao.^2 .* Resistencia));

6. Resultados de Simulação

Método Perdas (kW) Desvio de Tensão (%) Tempo (s)
SOCP 12.3 1.05 8.7
BPSO 13.1 1.12 45.2
NSGA-II 12.8 1.08 62.5

Tags: SOCP BPSO NSGA-II redes-de-distribuicao IEEE33

Publicado em 6-9 20:44 por Thomas