Implementação de Algoritmo PSO para Otimização de Despacho em Sistemas de Energia Integrados

O problema de otimização em sistemas de energia híbridos envolve minimizar o custo operacional total considerando geração fotovoltaica, armazenamento e diesel. A abordagem utiliza o algoritmo de otimização por enxame de partículas (PSO) em MATLAB, onde cada partícula representa uma solução candidata no espaço de busca.

A função objetivo é projetada para avaliar o custo com base nas potências dos componentes. As variáveis de decisão são normalizadas para o intervalo [0,1], facilitando a exploração pelo PSO. A seguir, uma versão revisada da função de adaptação:

function custo_total = calcular_custo(posicao)
    % Mapeamento para valores reais de potência
    geracao_solar = posicao(1) * 120;  // kW, faixa 0-120
    operacao_bateria = posicao(2) * 40 - 20;  // kW, faixa -20 a 20
    carga_diesel = posicao(3) * 180;  // kW, faixa 0-180

    % Cálculo dos custos individuais
    custo_solar_fixo = 0.28 * geracao_solar;
    custo_bateria_var = 0.12 * abs(operacao_bateria);
    custo_diesel_nlinear = carga_diesel * (0.42 + 0.08 * (carga_diesel / 180)^2);

    custo_soma = custo_solar_fixo + custo_bateria_var + custo_diesel_nlinear;

    % Penalidade por restrições operacionais
    violacao = (geracao_solar > 100) || (carga_diesel < 40);
    penalidade = violacao * 9000;

    custo_total = custo_soma + penalidade;
end

No loop principle do PSO, as partículas são atualizadas iterativamente. A implementação abaixo incorpora um mecanismo de reinício simples para escapar de ótimos locais:

% Configurações do PSO
num_individuos = 35;
limite_geracoes = 220;
peso_inercia = 0.65;
coef_cognitivo = 1.48;
coef_social = 1.48;

% Inicialização das populações
posicoes_correntes = rand(num_individuos, 3);
velocidades_correntes = zeros(num_individuos, 3);
melhores_posicoes_ind = posicoes_correntes;
melhores_custos_ind = inf(num_individuos, 1);
melhor_solucao_global = [];
melhor_custo_global = inf;

geracao = 1;
while geracao <= limite_geracoes
    % Avaliação de todas as partículas
    for idx = 1:num_individuos
        custo_avaliado = calcular_custo(posicoes_correntes(idx,:));
        if custo_avaliado < melhores_custos_ind(idx)
            melhores_custos_ind(idx) = custo_avaliado;
            melhores_posicoes_ind(idx,:) = posicoes_correntes(idx,:);
        end
    end

    % Atualização da melhor solução global
    [custo_minimo, indice_min] = min(melhores_custos_ind);
    if custo_minimo < melhor_custo_global
        melhor_custo_global = custo_minimo;
        melhor_solucao_global = melhores_posicoes_ind(indice_min,:);
    end

    % Verificação de estagnação
    if geracao > 15 && mod(geracao, 8) == 0 && melhor_custo_global == custo_anterior
        indices_reiniciar = randperm(num_individuos, floor(num_individuos/2));
        posicoes_correntes(indices_reiniciar,:) = rand(length(indices_reiniciar), 3);
    end
    custo_anterior = melhor_custo_global;

    % Movimentação das partículas
    for idx = 1:num_individuos
        vetor_aleatorio1 = rand(1, 3);
        vetor_aleatorio2 = rand(1, 3);
        velocidades_correntes(idx,:) = peso_inercia * velocidades_correntes(idx,:) ...
            + coef_cognitivo * vetor_aleatorio1 .* (melhores_posicoes_ind(idx,:) - posicoes_correntes(idx,:)) ...
            + coef_social * vetor_aleatorio2 .* (melhor_solucao_global - posicoes_correntes(idx,:));
        posicoes_correntes(idx,:) = posicoes_correntes(idx,:) + velocidades_correntes(idx,:);
        posicoes_correntes(idx,:) = min(max(posicoes_correntes(idx,:), 0), 1);
    end

    geracao = geracao + 1;
end

Para gerenciar restrições acopladas, como a operação exclusiva da bateria em modo carga ou descarga, a decodificação das posições inclui lógica condicional. Quando a bateria está em modo de carga, o limite mínimo do gerador a diesel é elevado para garantir a estabilidade do sistema.

Experimentos numéricos sugerem que populações entre 30 e 50 partículas e um número de iterações superior a 200 oferecem um equilíbrio entre precisão e tempo de computação. A fixação do peso de inércia mostrou-se mais estável em comparação com estratégias de decaimento dinâmico em diversos cenários testados.

Tags: MATLAB PSO Otimização de Despacho Sistemas de Energia Híbridos Algoritmo de Enxame de Partículas

Publicado em 6-16 23:11