适用平台:Matlab/Gurobi
程序提出了基于线性规划方法的多时间尺度储能容量配置方法,以满足微电网的接入要求为前提,以最小储能配置容量为目标,对混合储能装置进行容量配置。程序较为基础,算例丰富、注释清晰、干货满满,可扩展性和创新性很高!下面对文章和程序做简要介绍!
参考文献:
《含分布式发电的微电网中储能装置容量优化配置》-电力系统保护与控制
《基于机会约束规划的混合储能优化配置方法》-电网技术
《基于全寿命周期成本的配电网蓄电池储能系统的优化配置》-电网技术
《微电网复合储能多目标优化配置方法及评价指标》-电力系统自动化
程序创新点:
1)利用线性规划方法对储能进行配置,更贴合实际工程需求;
2)将储能配置精细化到分钟级别,进一步减小配置成本,模型普适性高;
主要工作:
由于分布式发电的随机性、间歇性,含分布式发电的微电网很难满足电网接入的要求。若在微电网中配置合适容量的储能装置,并对其采取适当控制方法,不但可以平滑分布式发电的输出功率,而且可以达到对微电网负荷削峰填谷的作用。为实现微电网内电池容量的优化配置,提出了基于线性规划方法的多时间尺度储能容量配置方法,以满足微电网的接入要求为前提,目标函数为配置过程中整体的运行成本最小,约束条件包括相应的运行约束以及能量平衡约束,最后将模型化简为一个混合整数线性规划问题,对混合储能装置进行容量优化配置。仿真结果表明,所提方法不仅能够使分布式发电出力满足微电网要求,并可以实现对储能容量的优化配置。
储能容量线性优化配置方法
定义问题:确定储能系统的目标和约束条件。目标可能包括最小化总成本、最大化可再生能源利用率、或者最小化对电网的影响等。约束条件可能包括储能系统的技术特性、电网的要求、负载需求等。
建立数学模型:将问题转化为数学表达式。定义决策变量,例如储能容量、充放电速率等。将目标函数和约束条件表示为这些变量的线性组合。确保问题可以被表示为线性规划问题。
线性规划求解:使用线性规划求解器,如单纯形法或内点法,来找到满足约束条件下最优的决策变量值。这将给出最优的储能容量配置,以达到定义的优化目标。
灵活性和灵敏性分析:进行灵活性和灵敏性分析,评估最优解对于参数变化的鲁棒性。这有助于了解在不同情景下储能系统配置的稳健性。
结果解释和应用:分析最优解,理解结果如何满足系统的需求和目标。将最优配置应用到实际系统中,可能需要考虑实际情况中的一些非线性因素。
需要注意的是,虽然线性规划在某些情况下能够提供较好的解决方案,但实际的储能系统配置问题可能涉及到非线性、离散、动态等复杂因素。因此,在一些情况下,可能需要使用更为复杂的优化技术,如整数规划、动态规划或者元启发式算法,以更好地解决实际问题。
程序结果:
案例1结果:
案例2结果:
案例3结果:
部分程序:
battery_effic_disch=0.95; %it cant be 1. set 0.99
battery_effic_charge=0.95; %it cant be 1. set 0.99
%iNVERTER
%2D zero element matrix (time intervals*time intervals)
zeros_2D=zeros(num_of_hours,num_of_hours);
%Create the positive diagonal matrix with 1.
v = ones(1,num_of_hours);
Diag1_pos = diag(v);
%Create the negative diagonal matrix with -1.
%Create the negative diagonal battery efficiency.
Diag_neg_disch_eff=Diag1_neg*battery_effic_disch; %is not implemented yet
Diag_pos_charge_eff=Diag1_pos*(1/battery_effic_charge);
%Create the diagonal matrix OF THE first efficiency
Diag_eff1_pos =diag(v);
Diag_eff1_neg=-Diag_eff1_pos;
%Create the diagonal matrix OF THE second efficiency
%create lower triangular matrix positive and negative
v=tril(ones(num_of_hours,num_of_hours),-1);
pos_triangular=v+Diag1_pos;
neg_triangular=-pos_triangular;
%Create the diagonal matrix OF THE bounds efficiency
v = ones(1,num_of_hours);
v=v.*bounds_efficiency(1);
Diag_bounds_eff1 =diag(v);
%Create the diagonal matrix OF THE bounds efficiency
v = ones(1,num_of_hours);
v=v.*bounds_efficiency(2);
Diag_bounds_eff2 =diag(v);
%Create the diagonal matrix OF THE bounds efficiency
v = ones(1,num_of_hours);
v=v.*bounds_efficiency(3);
Diag_bounds_eff3 =diag(v);
%Create the diagonal matrix OF THE bounds efficiency
v = ones(1,num_of_hours);
v=v.*bounds_efficiency(4);
Diag_bounds_eff4 =diag(v);
%create the upper bound value of y1 and y2
upper_y1=max_batt_discharge+max(PV);
upper_y2=max_batt_charge*(1/battery_effic_charge);
%Create the diagonal matrix of upper bound value of y1
v = ones(1,num_of_hours);
v=v.*upper_y1; %very big value for ours values
Diag_upper_pos_y1 =diag(v);
Diag_upper_neg_y1 =-Diag_upper_pos_y1;
%Create the diagonal matrix of upper bound value of y2
v = ones(1,num_of_hours);
v=v.*upper_y2; %very big value for ours values
Diag_upper_pos_y2 =diag(v);
Diag_upper_neg_y2 =-Diag_upper_pos_y2;
欢迎感兴趣的小伙伴关注并获取完整版代码,小编会不定期更新高质量的学习资料、文章和程序代码,为您的科研加油助力!