前言
智能电网应有效整合分布式可再生能源,实现电压稳定调节。优化调度是一个具有挑战性的多阶段问题,所有决策都需在同一时间尺度上做出,且必须考虑实时运行过程中的随机性。优化调度需要考虑配电网中不用设备的调度时间差异。电压、电网交互电能以及燃气轮机的出力在较慢的时间尺度上决策;光伏逆变器的设定点需要在较快时间尺度上设定,逆变器和电压调节限制需要被限制,且母线电压约束最为严格,从而实现更高效的可再生能源集成。在两阶段电网调度问题的基础上,提出了两种调度方案。平均调度算法通过一系列凸二次规划可收敛于最优两阶段决策。非凸概率方案需要解决两个不同的凸问题,且需要保证算法收敛性。
多阶段滚动优化的必要性
随着可再生能源渗透率的增加,配电网的优化调度变得具有挑战性。光伏(PV)单元的太阳能辐射在分钟内发生变化,可以通过调整功率逆变器的功率因数从而减少有功功率损失。在小时级的时间尺度上,配电网运营商每小时或每15分钟与主电网交换电能,如果偏离能源市场时间表,可能会带了利益损失。此外,微电网中的电压调节设备和燃气轮机以小时级别的时间响应。因此,多样化任务的综合决策需要多级智能配电网调度解决方案。
日内滚动优化
其基本思想是根据预测模型,结合测量输出,预测出系统在预测时域内的行为;在每一采样时刻k,基于对系统未来行为的预测,通过优化算法计算出未来一段控制时域M内的控制输入序列,但是k时刻只将优化结果的第一个值加在被控对象上,在k+1时刻,使用新的输出测量值重复上面整个优化步骤,这就是滚动优化的思想,如下图所示。可以看出,滚动优化是在有限时域内的优化,优化的性能指标只涉及从当前时刻开始预测时域内的有限时间,而到下一时刻,这一优化时段向前推移,在此滚动优化的过程中,预测信息不断被更新,通过反馈校正,同时采用历史信息及时有效纠正预测误差和随机因素产生的优化调度结果偏差,有效提高优化控制的精度。
滚动时长的选择
预测时域的大小影响的主要是系统的稳定性与快速性。在预测时域确定的情况下,控制时域的选取主要影响的是系统的动态性能,所以可以针对具体对象的动态性能要求来调节选取。控制时域选择的基本要求小于等于预测时域长度。因此,有必要对系统滚动时长进行量化选择,为了便于分析,选择控制时域和预测时域相等,即为滚动优化时长M(单位 h)。考虑到新能源出力变化在分钟级别,因此本程序日内滚动优化时长为15min。
程序介绍
首先,建立基于最优潮流的配电网两阶段滚动优化模型,并将两阶段电网调度公式化为凸凹问题;在长时间尺度内,优化目标包括成本最小化,同时保证电压稳定。其次,在随机优化鞍点近似线性化后,证明在保证运行约束最优的基础上算法的收敛性。与线性优化方法不同,这种随机优化(SA)方案每次处理一个随机样本,以提高计算效率。最后,在非凸约束的情况下,在第二阶段解决两个相似的凸问题。虽然目标成本具有零对偶间隙,但两阶段调度是非凸问题。程序中算例丰富,注释清晰,干货满满,创新性和可扩展性很高,足以撑起一篇高水平论文!下面对程序做简要介绍!
程序适用平台:Matlab+Yalmip+Cplex+Cvx
参考文献:《Two-Timescale Stochastic Dispatch of Smart Distribution Grids》-IEEE Trans on Smart Grid
Cvx链接:https://pan.baidu.com/s/18oPRLhKvgciFGC0qrpfZyw
提取码:2bvt
注:导入Cvx求解器后,如果出现图片注释乱码情况,请在设置路径中删除导入的cvx\lib\narginchk_ 即可以解决问题!
出错情况:
程序结果
部分程序
unction [first_stage_vars, dual_vars] = ...
solve_average(benchmark, params, random_vars_mean, v_bounds)
benchmark.Nb;F = benchmark.F;R = benchmark.R;X = benchmark.X; =
benchmark.v_base; =
Cd = @(x) params.pd_linear'*x + params.pd_quadratic'*x.^2;
Cpv= @(p_inverter, p_load) ...
params.pi_inverter.'*max(0, p_inverter-p_load); %#ok<*NASGU>
p_load_avg = random_vars_mean.p_load;
q_load_avg = random_vars_mean.q_load;
random_vars_mean.pinv_available; =
cvx_begincvx_solver sedumi
variables p(Nb) q(Nb) p_0 P(Nb) Q(Nb) p_diesel(Nb) v(Nb) v_0 ...
q_pv(Nb)
dual variables dual_upper dual_lower dual_v
minimize params.beta*p_0 + Cd(p_diesel) + Cpv(p_pv, p_load_avg)
p_pv - p_load_avg + p_diesel == p; %#ok<*EQEFF>
q_pv - q_load_avg == q; %#ok<*VUNUS>
p_0 >= -sum(p) + (p.'*R*p + q.'*R*q)./v_base;
params.pd_lower;p_diesel <= params.pd_upper; =
0 <= p_pv;
pinv_available_avg;q_pv <= diag(params.phi_inverter)*p_pv; =
<= diag(params.phi_inverter)*p_pv;
= F.'*p;Q == F.'*q; =
params.S2;p_pv.^2 + q_pv.^2 <= params.s2_inverter; =
dual_v: v_0*ones(Nb, 1) == v - (2*R*p + 2*X*q)./v_base;
dual_upper: v <= v_bounds.v_upper;
dual_lower: v >= v_bounds.v_lower;
部分内容源自网络,侵权联系删除!
欢迎感兴趣的小伙伴点击文末阅读原文获取完整版代码,小编会不定期更新高质量的学习资料、文章和程序代码,为您的科研加油助力!
更多创新性预测及优化程序请点击公众号首页:《预测优化》|《综合能源》链接!