Tối Ưu Vận Hành Vi Lưới Tích Hợp Năng Lượng Tái Tạo Bằng Thuật Toán Bầy Đàn Cải Tiến

1. Kiến trúc dự án

microgrid_pso/
 ├─ execute.m                 % Kịch bản khởi chạy chính
 ├─ adaptive_pso.m            % Lõi thuật toán PSO cải tiến
 ├─ grid_system.m             % Mô hình tham số vi lưới 24h
 ├─ objective_eval.m          % Hàm tính toán chi phí & ràng buộc
 ├─ render_plots.m            % Trực quan hóa kết quả điều phối
 └─ interface/
     └─ control_panel.mlapp   % Giao diện tham số hóa

2. Mô hình hệ thống vi lưới (Chu kỳ 24 giờ)

File grid_system.m định nghĩa các tham số kỹ thuật và dữ liệu dự báo tải, năng lượng mặt trời, gió cùng cấu hình thiết bị lưu trữ và máy phát dự phòng.

function sys = define_grid_params()
    sys.horizon = 24;
    sys.load_kw = [120,110,105,100,95,100,110,130,150,160,170,180,190,185,180,170,160,150,140,130,125,120,115,118];
    sys.pv_kw = [0,0,0,0,5,30,70,120,180,200,190,170,140,100,60,30,10,0,0,0,0,0,0,0];
    sys.wt_kw = [40,35,30,25,20,25,35,50,60,70,65,55,45,40,35,30,25,20,15,20,25,30,35,45];
    
    sys.gen_max = 200; sys.ramp_rate = 50;
    sys.batt_cap = 100; sys.batt_pwr = 50; sys.batt_eff = 0.95;
    sys.elec_tariff = [0.4*ones(1,7), 0.8*ones(1,10), 0.4*ones(1,7)];
end

3. Thuật toán PSO với trọng số thích nghi & nhiễu loạn hỗn loạn

File adaptive_pso.m triển khai cơ chế cập nhật vận tốc kết hợp hệ số quán tính suy giảm tuyến tính và ánh xạ Logistic để tránh mắc kẹt tại cực trị địa phương. Không gian tìm kiếm bao gồm 48 chiều (công suất máy phát + công suất sạc/xả pin).

function [best_pos, best_val] = run_adaptive_pso(sys, cfg)
    dim = 48; pop_size = cfg.pop_size; max_gen = cfg.max_iter;
    lb = [zeros(1,24), -sys.batt_pwr*ones(1,24)];
    ub = [sys.gen_max*ones(1,24), sys.batt_pwr*ones(1,24)];
    
    pos = lb + (ub - lb) .* rand(pop_size, dim);
    vel = randn(pop_size, dim) * 0.5;
    p_best_pos = pos; p_best_val = inf(1, pop_size);
    
    [g_best_val, idx] = min(arrayfun(@(i) objective_eval(pos(i,:), sys), 1:pop_size));
    g_best_pos = pos(idx, :);
    
    for gen = 1:max_gen
        w = cfg.w_max - (cfg.w_max - cfg.w_min) * (gen / max_gen);
        for i = 1:pop_size
            r1 = rand(1, dim); r2 = rand(1, dim);
            chaos_map = 4 * r1 .* (1 - r1);
            
            vel(i,:) = w * vel(i,:) + cfg.c1 * chaos_map .* (p_best_pos(i,:) - pos(i,:)) ...
                                  + cfg.c2 * r2 .* (g_best_pos - pos(i,:));
            pos(i,:) = pos(i,:) + vel(i,:);
            pos(i,:) = max(min(pos(i,:), ub), lb);
            
            f_curr = objective_eval(pos(i,:), sys);
            if f_curr < p_best_val(i)
                p_best_val(i) = f_curr; p_best_pos(i,:) = pos(i,:);
                if f_curr < g_best_val
                    g_best_val = f_curr; g_best_pos = pos(i,:);
                end
            end
        end
    end
    best_pos = g_best_pos; best_val = g_best_val;
end

4. Hàm mục tiêu đa thành phần

File objective_eval.m tổng hợp chi phí nhiên liệu, tiền mua điện lưới, cùng các hệ số phạt vi phạm cân bằng công suất, giới hạn SOC và tốc độ thay đổi công suất máy phát.

function obj = objective_eval(vars, sys)
    p_gen = vars(1:24); p_stor = vars(25:48);
    
    deficit = sys.load_kw - sys.pv_kw - sys.wt_kw - p_gen - p_stor;
    cost_balance = sum(abs(deficit));
    
    cost_fuel = sum(0.3 * p_gen.^2 + 0.5 * p_gen);
    grid_import = max(deficit, 0);
    cost_grid = sum(sys.elec_tariff .* grid_import);
    
    soc_trace = cumsum([0, p_stor * sys.batt_eff]); soc_trace = soc_trace(2:end);
    pen_soc = 1e3 * sum(soc_trace < 0 | soc_trace > sys.batt_cap);
    
    pen_ramp = 1e3 * sum(abs(diff(p_gen)) > sys.ramp_rate);
    
    obj = cost_balance + cost_fuel + cost_grid + pen_soc + pen_ramp;
end

5. Kịch bản thực thi & Trực quan hóa

Tệp execute.m thiết lập tham số tối ưu, gọi hàm PSO, giải mã kết quả và xuất biểu đồ vận hành.

clear; clc; close all;
sys = define_grid_params();
cfg.pop_size = 40; cfg.max_iter = 200;
cfg.w_max = 0.9; cfg.w_min = 0.4; cfg.c1 = 1.5; cfg.c2 = 1.5;

tic
[opt_vars, min_cost] = run_adaptive_pso(sys, cfg);
toc

p_gen_opt = opt_vars(1:24); p_bat_opt = opt_vars(25:48);
render_plots(sys, p_gen_opt, p_bat_opt, min_cost);

Hàm render_plots.m vẽ đồ thị phân bổ công suất theo giờ:

function render_plots(sys, p_gen, p_bat, cost)
    t = 1:sys.horizon;
    figure; 
    plot(t, sys.load_kw, 'k-', t, p_gen, 'b--', t, p_bat, 'r:', t, sys.pv_kw+sys.wt_kw, 'g-.', 'LineWidth', 1.5);
    legend('Tải', 'Máy phát Diesel', 'Hệ thống Lưu trữ', 'NL Tái tạo');
    grid on; title(sprintf('Kế hoạch điều phối - Tổng chi phí: %.2f đơn vị', cost));
    xlabel('Thời gian (giờ)'); ylabel('Công suất (kW)');
end

6. Tích hợp giao diện & Mở rộng MOPSO

Giao diện control_panel.mlapp cho phép điều chỉnh trực tiếp kích thước quần thể, số vòng lặp và hệ số học, sau đó kích hoạt callback để cập nhật đồ thị thời gian thực:

function StartCallback(app, event)
    cfg.pop_size = app.PopEditField.Value;
    cfg.max_iter = app.IterEditField.Value;
    [opt_sol, val] = run_adaptive_pso(app.sys, cfg);
    refresh_canvas(app, opt_sol, val);
end

Để chuyển sang tối ưu đa mục tiêu (MOPSO), cấu trúc hàm thích nghi được tách thành vector [cost_fuel, cost_grid, pen_soc], bổ sung kho lưu trữ ngoài (external archive) và cơ chế xếp hạng Pareto. Các module giao diện đã được chuẩn bị sẵn cho việc tích hợp phương pháp NSGA-II hoặc MOPSO tiêu chuẩn.

Thẻ: microgrid-economic-dispatch particle-swarm-optimization matlab-metaheuristics energy-storage-scheduling adaptive-inertia-weight

Đăng vào ngày 8 tháng 10 lúc 06:11