ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

改进灰狼算法实现不平衡配电网储能优化配置与容量分析

改进灰狼算法实现不平衡配电网储能优化配置与容量分析 1. 这个课题到底卡在哪不平衡配电网的储能接入没那么简单1.1 三相不平衡为什么让常规配置方法失效做配电网储能优化的同行应该都有体会在IEEE 33节点这类标准算例上跑通的方案一搬到实际的低压配电网或者含不对称负荷的中压馈线结果往往没法用。原因就在于标准测试系统大多是三相平衡模型而真实配电网里单相负荷、两相供电、光伏单相接入这些情况比比皆是三相电压和电流天然就是不对称的。我的研究方向就是基于Matlab做储能优化配置核心方法论是改进灰狼算法求解搭配灵敏度分析和接入容量优化两个环节目标是把这套方法真正落到不平衡配电网场景里。储能优化配置这个问题的本质是在一堆可行解里找到一组储能的位置、额定功率和额定容量让某个综合指标最优。但如果你想在一个三相不平衡的系统里做这件事第一步的潮流计算就不能用单相模型。单相潮流把三相当作对称来处理算出来的节点电压、支路潮流都只有正序分量网损和电压偏差的评估天然偏乐观。也就是说你在平衡模型下算出这个节点装200kW储能能把电压抬到合格范围放到不平衡系统里A相可能已经过压C相还在欠压。这种算出来能用、实际不能装的坑我见过不少项目踩进去。1.2 整体技术路线的四个环节我这次做的课题就是把储能优化配置从平衡模型推广到不平衡配电网整个技术路线分四个环节建立不平衡配电网的三相潮流模型用前推回代法或者三相牛顿-拉夫逊法作为底层计算引擎基于潮流结果做灵敏度分析把候选安装节点从几十个缩到五六个缩小优化搜索空间建立以综合成本最小为目标的储能选址定容模型用改进灰狼算法求解在最优解附近做接入容量扫查分析不同接入容量下电压越限、网损、馈线负载率的变化规律给出容量上限建议。这套路线的核心逻辑是先缩小范围、再精确寻优、最后验证边界。没有灵敏度分析这步直接用智能算法在整个网架上搜索三十三个节点可能还能跑一百多个节点的实际馈线就非常吃力了。灵敏度分析和接入容量优化在这个课题里是两把标尺前者回答在哪装效果好后者回答在这是不是装得下两者缺一不可。2. 灵敏度分析先行用三相潮流结果把候选节点筛出来2.1 电压灵敏度与网损灵敏度的计算细节灵敏度分析的目的是回答一个问题在哪些节点装储能对改善电压和降低网损最有效这里我用的是两类指标。第一类是电压灵敏度。对不平衡配电网每个节点有三相电压储能接入某一相或者三相对称接入时对各个节点各相电压的影响程度是不一样的。通过三相牛顿-拉夫逊法求解得到的雅可比矩阵取逆之后就能得到电压对节点注入功率的灵敏度矩阵。实际计算时我在Matlab里用inv(Jacobian)提取灵敏度矩阵然后取储能候选节点处功率变化对应目标节点电压变化的元素作为电压灵敏度指标。需要注意三相系统的雅可比矩阵维度是3N×3NN为节点数比单相模型大得多矩阵求逆的计算代价也要相应考虑。第二类是网损灵敏度。网损对节点注入功率的偏导可以通过两次潮流计算用数值差分求出来在节点i注入一个小的功率增量ΔP重新算潮流记录系统总网损的变化量ΔPloss/ΔPi就是节点i的网损灵敏度。这里有个关键细节三相不平衡系统里节点注入功率要分相处理。如果储能是三相对称接入注入功率三相平分如果是单相储能就只在某一相注入。这两种情况算出来的灵敏度差别很大直接影响候选节点的排序后面做方案的时候一定要明确储能的接线方式。2.2 归一化排序与候选节点的筛选规则不同灵敏度的量纲不一样电压灵敏度是V/MW网损灵敏度是kW/kW没法直接比较。我在实现时把每个指标做了极差归一化S_norm (S - S_min) / (S_max - S_min)然后按加权和排序电压灵敏度和网损灵敏度的权重我取0.6和0.4。这个权重不是拍脑袋定的而是根据算例的实际需求调整的——如果是电压越限严重的馈线就把电压灵敏度的权重调高如果是网损偏高但电压尚可的系统就把网损灵敏度的权重拉上来。你可以通过改变这个权重观察最终选出的候选节点集合变化这本身就是一种灵敏度分析。筛选规则我定了两条一是加权灵敏度排名前30%的节点二是排除那些已经装了分布式光伏、剩余可接入空间很小的节点。实际操作下来33节点系统一般能筛出6到8个候选节点把这个集合作为后面灰狼算法的离散决策空间。这一步能大幅压缩搜索空间让改进灰狼算法把精力集中在真正有潜力的位置上而不是浪费在那些装了储能也没效果的节点上。3. 改进灰狼算法的三处关键改动从早熟收敛到稳中求优3.1 标准GWO在储能配置场景下的三个短板灰狼算法模拟的是灰狼群体的等级制度α狼是最优解β狼是次优解δ狼是第三优解剩下的ω狼跟着前三者更新位置。核心公式是D |C·X_p(t) - X(t)|X(t1) X_p(t) - A·D其中A 2a·r1 - aC 2r2a从2线性降到0。这个算法结构简单、参数少但我实际用下来有几个明显的毛病。第一种群初始化是纯随机的如果初始解分布不好很容易让搜索集中在一片区域前期探索不足。第二收敛因子a是线性衰减的这跟实际搜索需求不匹配——搜索前期需要强探索后期需要强开发线性衰减太平均了。第三整个种群都跟着α、β、δ跑一旦这三个位置陷入局部最优全群就会被吸过去缺乏跳出机制。在储能配置这个场景里决策变量包括位置离散、额定功率连续、额定容量连续是一个混合整数优化问题维度不高但非线性强、约束多。我试过用标准GWO直接跑经常出现早熟收敛而且每次跑出来的结果都不一样解的质量很不稳定。做科研课题还能多跑几次取最优做工程项目这样肯定不行。3.2 混沌初始化、余弦收敛因子与差分变异针对上面的问题我做了一处算一处三处改动分别对应三个短板。第一处是Tent混沌映射初始化种群。用Tent映射生成[0,1]区间分布更均匀的序列再映射到决策变量的取值范围这样初始种群能更均匀地覆盖整个搜索空间避免抱团。Tent映射的公式是x(k1) 2x(k), 0 ≤ x(k) 0.5x(k1) 2(1-x(k)), 0.5 ≤ x(k) ≤ 1这个式子简单到在Matlab里一行就能写出来但效果比rand随机初始化稳定得多。我对比过十次独立实验的初始种群覆盖度混沌初始化的均匀性指标比随机初始化好了一截。第二处是收敛因子a的非线性自适应调整。我把a从线性衰减改成余弦衰减a 2·cos(π/2 · t/T_max)t是当前迭代次数T_max是最大迭代次数。前期a衰减慢A的模值大狼群保持大范围的全局搜索后期a快速接近0A的模值小狼群围绕α、β、δ精细开发。实测下来这个改动对收敛精度的提升最明显尤其是目标函数存在多个相近局部最优的时候余弦衰减能让算法在后期有更充分的时间在最优解附近精修。第三处是引入差分进化的交叉变异操作。每轮迭代后以一定概率对狼群中的个体执行DE的变异和交叉生成试验个体如果试验个体适应度更好就替换原个体。这相当于给种群一个跳出局部最优的后门。变异我用的是DE/best/1策略V X_α F·(X_r1 - X_r2)F取0.5交叉概率CR取0.3到0.6之间。这个参数后面会细说因为它对结果稳定性影响很大。3.3 编码方式与适应度函数的设计灰狼算法的个体编码我设计成三段第一段是储能安装位置整型对应候选节点编号第二段是额定功率连续第三段是额定容量连续。位置用候选节点集合的索引来表示功率和容量用连续实数编码。这里有个细节位置变量在更新时要用四舍五入取整但要先做边界约束处理避免越界访问候选节点集合。适应度函数就是优化模型的目标函数值加上罚函数。对电压越限、SOC越限这些约束我用罚函数处理罚系数取一个比较大的数比如1e5。这里有个经验罚系数不要一开始就设太大否则可行域边界附近会出现适应度悬崖算法很难从不可行区域爬回可行区域。我一般是先用1e3跑一轮看结果里约束违反的情况再逐步调整到合适的量级。4. 储能配置模型与接入容量约束目标函数怎么建、边界怎么算4.1 双层优化框架与经济性目标函数我采用的是双层优化结构外层是储能选址定容优化内层是给定储能配置下的不平衡三相潮流计算和运行状态评估。内层潮流输出电压、网损这些指标反馈给外层计算适应度形成完整的闭环。外层目标函数是最小化年综合费用包含四部分C_total C_inv C_om C_loss C_penaltyC_inv是储能投资等年值用等年值系数折算C_inv (r(1r)^n / ((1r)^n - 1)) · (k_p · P_ess k_e · E_ess)r取0.08n取10年k_p和k_e分别是功率成本和容量成本。我按当时锂电池储能系统的市场水平取1200元/kW和1800元/kWh。这两个系数不是固定的做工程方案时要根据实际采购价格调整做科研则保持固定以便横向对比。C_om是年运行维护费用取投资成本的5%。C_loss是网损费用按年网损电量和电价计算。C_penalty是电压偏差惩罚对电压越限的时段和节点进行累加惩罚。内层潮流计算我用了前推回代法做三相不平衡潮流。对辐射状配电网前推回代法比牛顿-拉夫逊法快得多而且不容易因为初值问题发散。具体步骤是先假定各节点电压为额定值从末端向首端推算支路电流和功率再从首端向末端回推电压反复迭代直到两次电压差小于1e-6。4.2 储能SOC模型与运行约束的处理储能运行约束这块我建立了一个24小时的调度简化模型把典型日负荷曲线分成24个时段每个时段储能有一个充放电功率决策量。SOC的递推公式是SOC(t1) SOC(t) η_ch·P_ch(t)·Δt / E_ess - P_dis(t)·Δt / (η_dis·E_ess)充电效率η_ch取0.95放电效率η_dis取0.95Δt取1小时。约束条件包括SOC保持在[0.1, 0.9]区间充放电功率不超过额定值充放电状态互斥不能同时充放电以及节点电压各相保持在[0.93, 1.07]pu范围内。充放电状态互斥这个约束在Matlab里实现时容易踩坑。如果你用0/1整数变量标记状态再乘以功率变量模型就变成混合整数非线性规划灰狼算法求解时维度会翻倍。我的处理方式是不用整数变量直接用罚函数如果某一时段同时出现正的充电功率和正的放电功率就在适应度函数里加一个大的惩罚项。这样虽然严谨性差一点但工程上够用而且大幅简化了编码。追求严格数学最优的同行可以用YALMIP这类建模工具来做但嵌入到灰狼算法的迭代循环里性能会差很多。4.3 接入容量约束的建模逻辑接入容量优化是这个课题里我理解最深的一个环节。所谓接入容量不是简单地变压器容量减去现有负荷就完了。储能接入后在充电时段是负荷在放电时段是电源它对馈线潮流的影响是双向的、时变的。我的处理思路是在获得最优配置点后把储能容量从0开始逐步增加每增加一个步长就做一次24小时时段的潮流计算检查三类约束节点电压是否越限、馈线是否过载、变压器反向负载率是否超过限值。第一次出现约束破坏对应的容量就是该节点的极限接入容量。这个扫查过程其实是对灵敏度分析结果的验证和延伸灵敏度高的节点往往接入容量也大但两者并不完全等价。我算下来的一个典型结果是某个候选节点电压灵敏度排名第二但因为靠近馈线末端线路热稳定约束限制了它的接入容量上限最终能装的储能反而不如灵敏度排名第三的节点多。这一点在写论文和做工程方案时都要特别注意。5. 算例结果解读灵敏度排序和接入容量为什么经常打架5.1 测试系统改造与算法参数设置我用了一个改造后的IEEE 33节点系统把其中部分负荷改为单相负荷制造三相不平衡场景并在几个节点接入分布式光伏模拟高渗透率的情况。光伏出力用典型日的出力曲线负荷用典型日负荷曲线峰值负荷在1.0pu谷值在0.4pu左右。灰狼算法参数种群规模30最大迭代次数200每个个体对应一个储能配置方案内层要做24个时段的潮流计算也就是一个个体一次适应度评估要做24次潮流。33节点系统前推回代法单次计算大约0.05秒一个个体24次就是1.2秒一代30个个体就是36秒200代要跑两个小时左右。这个运算量在Matlab里还能接受但如果你要跑蒙特卡洛或者多场景建议用并行计算工具箱把种群并行化能节省70%以上的时间。改进前后算法对比我记录了收敛曲线标准GWO在80代左右就停滞最优适应度停在某个值附近改进GWO到120代还在缓慢下降最终适应度比标准GWO低约8.6%。这个差距主要是罚函数项贡献的——标准GWO容易在SOC越限或者电压越限的不可行区域边缘卡住改进GWO因为有混沌初始化和差分变异能够绕开这些陷阱找到真正可行且更优的解。5.2 最优配置结果与电压改善情况最优配置结果是储能安装在节点18、22和25对应筛选后的候选节点总配置功率0.82MW总容量2.4MWh。相比不装储能的情况系统总网损从0.113MW降到0.081MW降幅28.3%。各节点三相电压的偏差范围从不装储能时的[0.91, 1.06]pu缩小到[0.95, 1.03]pu三相电压不平衡度也明显改善最低相电压从0.91pu抬升到0.95pu以上。这里有一个值得注意的现象由于系统本身三相不平衡三相对称接入的储能并不能把三相电压都拉到同一水平。A相电压合格了C相可能还是偏低。如果这时候只考虑单相电压约束而忽略三相不平衡度指标优化结果就会偏向某一相。我把三相不平衡度加入了运行约束限定各节点三相电压的最大偏差不超过2%这个约束在目标函数里占的权重不小实际效果是储能的充放电策略会更多地补偿低电压相。这个细节建议做同类课题的同行一定要重视否则评审专家一问三相电压曲线你就得回去重跑。5.3 接入容量扫查的关键发现接入容量扫查的典型结果馈线末端节点比如节点18的极限接入容量大约是0.6MW超过后线路末端电压在放电时段会越上限而靠近变电站的节点比如节点24极限接入容量能到1.2MW限制因素变成了变压器反向负载率。这说明不同节点的接入瓶颈完全不同储能规划不能只看电压约束还必须结合线路热稳定和变压器容量一起校验。如果把灵敏度排序和接入容量排序放在一起看能得出一个非常有工程价值的结论灵敏度排第一的节点不一定是最佳安装点因为它可能同时受限于接入容量反过来接入容量大的节点如果灵敏度低装了大储能改善效果也有限。所以最终方案要在灵敏度排序和接入容量上限这两个维度上取交集找到综合最优的节点组合。我在论文里用了一张二维散点图把这两个维度画在一起每个节点是一个点横轴是灵敏度排名纵轴是极限接入容量最优解总是落在高灵敏度、高容量这个象限里非常直观。6. 复现踩坑记录与代码组织建议写给想自己跑一遍的人6.1 灰狼算法参数最容易翻车的三个点第一个是收敛因子a的下限。余弦衰减公式里a最后会接近0如果A的模值长时间接近0狼群的位置更新几乎停滞容易让算法在后期陷入假收敛。我实际测试时把a的下限限制在0.01而不是让它严格到0收敛稳定性有明显改善。这个0.01的下限在代码里就是一行a max(a, 0.01)的事但很多人会忽略。第二个是差分变异的F参数。F取太大试验个体偏离原个体太远种群震荡严重F取太小变异效果不明显跳不出局部最优。我测了几组值F0.5配合CR0.4效果最稳。但这两个参数跟问题的规模和解空间的尺度有关换一个系统最好重新标定不要直接照搬。建议你在自己的算例上做一个简单的参数扫描F从0.3到0.8每隔0.1取一组每组跑5次取适应度均值和方差选均值低且方差小的那组。第三个是惩罚系数的量级。我前面说过罚系数不能太大但也不能太小。太小了约束形同虚设算法会输出SOC常年越限的伪最优解。我的经验是罚系数的量级应当跟目标函数中的成本项保持同一个数量级或者稍高先跑一次看约束违反情况再手动调整。6.2 三相不平衡潮流的收敛问题与对策前推回代法在严重三相不平衡场景下容易收敛慢甚至震荡。我遇到的一个典型情况是光伏大发时段某相馈线末端电压偏低而反向潮流明显前推回代法迭代了50多次才收敛偶尔还出现来回震荡。解决办法有三个一是对支路电流更新加阻尼因子新值取0.7倍新计算值加上0.3倍上一步值二是PV节点的处理要谨慎前推回代法对PV节点支持不好我干脆把光伏在潮流计算里当作PQ节点处理用恒功率模型这也是大多数配电网分析软件的默认做法三是收敛判据不要只看最大电压偏差还要看最大功率不平衡量两个指标同时满足才算收敛。这三个对策叠加之后最恶劣工况下的迭代次数从50多次降到了15次以内。6.3 建议的代码目录结构与模块划分如果你要复现这个课题我建议代码按以下结构组织每块一个独立函数load_data.m读入网络拓扑、线路阻抗、负荷数据生成基础数据结构three_phase_powerflow.m三相不平衡前推回代潮流输入是网络数据和节点注入功率输出是节点电压和支路潮流sensitivity_analysis.m灵敏度计算与候选节点筛选输出候选节点集合gwo_improved.m改进灰狼算法主程序包含Tent混沌初始化、余弦衰减收敛因子、差分变异三个模块fitness_ess.m适应度函数调用潮流函数算24时段运行状态汇总目标函数值access_capacity_scan.m接入容量扫查模块输出各候选节点的极限接入容量。把潮流计算独立出来是这套代码最关键的架构决策。我一开始把潮流写在适应度函数里改一个参数就要改一大片代码后来拆出来才发现后面做灵敏度分析、接入容量扫查都能直接复用省了至少一半的开发时间。另一点建议是在主程序里加上每一步的计时输出比如tStart tic;这样方便你判断是哪个模块拖慢了整体运算。最后说一句关于Matlab版本兼容性的事。我用的版本涉及arrayfun、parfor和fmincon的部分功能在不同发布版里有行为差异如果你用的不是同一版本跑不通的先看看是不是版本API变更的问题。另外如果数据规模再往上升Matlab的循环性能会吃紧前推回代法里的支路遍历用向量化写法能快不少但这个优化要等算法调通之后再做否则边调bug边优化性能排查问题会非常痛苦。我自己的习惯是先把功能跑通结果合理了再回去优化速度这样每一步都有明确的验证基准。
返回列表