拓冰建站拓冰建站
首页 / 资讯中心 / 正文

需求侧响应下配电网供电能力综合评估的Matlab复现与改进

拿到“基于需求侧响应的配电网供电能力综合评估”这个题目时很多人第一反应都是先找到论文原文再去找能跑通的Matlab代码跑出结果完事。这个方法不是不行但复现这种硕士论文级别的项目如果只停留在“跑通”后面导师问一句“为什么这样建模”“指标体系怎么来的”“创新点到底改在哪”你很容易卡住。这篇博客就把整个复现项目的建模思路、指标体系、评估框架、Matlab代码骨架以及我在实际调试中踩过的坑完整拆一遍。目标读者是做配电网规划、需求侧响应、或者正在为电网方向毕业设计发愁的研究生和工程师——这篇至少能帮你省掉一大半翻文献、试错的时间。这个题目的核心其实就一句话在传统供电能力评估的基础上把需求侧响应DR作为一种可调用的柔性资源放进去再通过一套综合指标去评判配电网“到底能带多少负荷”以及“带得怎么样”。传统评估只盯着网架结构不看重荷侧的主动调节能力引入DR之后评估结果会更贴近实际运行也能让规划人员看到“通过激励用户调负荷比砸钱改造线路更划算”的空间。下面我以复现过程中采用的一套改进方案来拆解框架是通用的具体参数可以根据你手里的论文调整。1. 传统供电能力评估的困局需求侧响应为什么必须进来1.1 供电能力评估到底在评估什么配电网供电能力Total Supply CapabilityTSC这个概念在电力系统里不是新东西。它的定义通常可以概括为在满足N-1安全准则、节点电压约束、支路容量约束的前提下配电网能够供应的最大负荷。学术一点的说法叫“最大供电能力”工程上则更关注“还能接入多少新增负荷”。传统评估的思路很简单粗暴把配电网看成一张固定的网负荷是刚性的、外生的你只需要回答一个问题——把所有开关闭合、变压器容量卡到位之后这张网最多能带多少负荷而不越限。实现方式一般有两条路解析法基于线性化的潮流模型推导最大供电能力的解析表达式计算速度快但精度有限适应性差。优化法把“最大化总供电负荷”写成目标函数用潮流计算去校验电压和容量约束再用优化算法迭代求解精度高是当前主流的做法。但这里有个很大的问题传统模型假定负荷是刚性的用户不会因为电价变化而改变用电行为。放到现在的配电网环境里这个假设越来越站不住脚——分时电价、可中断负荷协议、电动汽车有序充电、储能套利这些机制都在改变用户的实际负荷曲线。如果评估时不考虑这些算出来的TSC就偏保守规划投资也会跟着偏大。1.2 需求侧响应改变了什么需求侧响应的本质是让“负荷峰值”从一个固定数值变成一个可调节的变量。用户可以根据电价信号或激励措施在高峰时段减少用电削峰或者把一部分用电从高峰挪到低谷填谷。于是供电能力就不只是“网架本身能承受多少负荷”的静态指标而是变成了“在网架约束和用户响应能力共同作用下系统能安全供应多少负荷”的动态结果。我用一个生活化的类比来解释传统评估就像一家食堂按“所有人同时排队打饭的上限”来设计窗口数结果发现一年也就过年那一周会满座平时窗口全闲着。需求侧响应就像引入错峰就餐、外卖预订同样的窗口能服务更多人而且不用扩建食堂。落到配电网项目里DR能带来三类直接好处降低峰值负荷峰负荷降下来变压器和线路的负载率随之下降供电能力的瓶颈被推迟。改善负荷曲线负荷更平坦设备利用率提升网损也下降。推迟网架升级原本需要新建线路、增容变压器的方案可能通过DR调度就能满足新增负荷需求投资节省非常可观。所以在复现这篇论文时首先要建立的建模理念就是把DR看作一种“虚拟发电资源”或“柔性负荷资源”与供电能力评估模型耦合求解而不是先算完供电能力再来做“事后调整”。这就是整个项目逻辑的起点。2. 综合评估指标体系不只看“能带多少”还要看“带得好不好”2.1 为什么不能只盯着一个TSC数值复现这类论文最容易掉进去的坑就是只把目标函数里的最大供电能力算出来然后画个柱状图收工。但标题里明确写着“综合评估”四个字这就意味着除了“能带多少负荷”这个绝对数值你还要回答“在什么代价下带了多少负荷”“这种供电水平对网架安全、运行经济性、电压质量有什么影响”。如果你只用一个TSC指标会带来两个麻烦不可比性不同DR方案、不同DR参数下TSC都不一样但光看数值很难判断哪种方案更好——是供电能力更大重要还是DR补偿成本更低重要不同决策者偏好不同单一指标给不出答案。不完整性TSC是一个偏“上限”的指标它回答的是最大能力但实际运行中用户更关心电压是否合格、网损是多少、设备负载是否均匀。这些维度TSC都覆盖不了。所以综合评估的框架必须把多个维度整合到一个可计算、可比较的体系里。2.2 指标体系怎么搭四个维度加一张表我复现时采用的指标体系包含四个维度七个指标你可以根据自己的论文调整但框架基本是通用的评估维度具体指标计算说明指标方向供电能力最大供电能力提升率DR后TSC - 传统TSC/ 传统TSC × 100%越大越好安全性N-1通过率逐个断开支路后系统仍满足约束的比例越大越好安全性支路负载均衡度各支路载荷率的标准差或均衡度指数越小越好电压质量电压合格率节点电压在允许偏移范围内的占比越大越好经济性综合运行成本网损成本 DR调度补偿成本越小越好经济性单位供电能力成本综合运行成本 / 实际供电量越小越好可靠性平均供电可用率基于故障枚举或简化可靠性模型估算越大越好这套指标里最大供电能力提升率是核心它直接体现了引入DR带来的“硬收益”。而其他指标则用来体现“软约束”——比如说一个方案虽然把TSC提升了很多但代价是大量削减用户负荷、电压跌落严重那它的综合得分不一定高这就逼着优化算法在“多供电”和“供好电”之间找平衡。2.3 指标归一化与权重确定熵权法的计算公式不同指标的量纲和方向都不一样直接加权相加没有意义。所以要先做归一化。我用的方法是极差标准化对于“越大越好”的指标 x (x - x_min) / (x_max - x_min)对于“越小越好”的指标 x (x_max - x) / (x_max - x_min)这样所有指标都映射到0到1之间越大越好。归一化之后就是权重的问题。建议用熵权法和AHP结合的方式熵权法根据指标数据的离散程度自动定权避免主观性AHP引入专家判断对重要指标比如供电能力提升率进行偏好强化。熵权法的核心公式不复杂在Matlab里几行就能写出来。假设有m个方案、n个指标归一化后的矩阵是X计算指标j下第i个方案的比重p_ij x_ij / Σ_i x_ij计算信息熵e_j -1/ln(m) × Σ_i (p_ij × ln(p_ij))计算权重w_j (1 - e_j) / Σ_j (1 - e_j)信息熵越小说明这个指标在不同方案之间的差异越大包含的区分信息越多权重就越高。实际做下来“最大供电能力提升率”和“综合运行成本”这两个指标的熵通常较小权重大符合直觉。最终综合评分就是S Σ_j w_j × x_j这个S可以作为优化模型里的目标函数也可以用来对多个DR方案做横向对比。我在复现时是用它做后评估的先跑优化得到最优TSC然后再对几组DR参数方案打分排序。3. 需求侧响应建模分时电价下用户负荷响应模型3.1 需求价格弹性DR模型的心脏要把需求侧响应量化到潮流计算里必须先回答一个问题电价变了用户的负荷到底怎么变这个问题的标准答案就是需求价格弹性系数。弹性的定义是e (ΔP / P) / (Δρ / ρ)其中P是有功负荷ρ是电价。它表示电价变化1%负荷会变化百分之几。注意这个弹性系数在分时电价模型里要分两类自弹性系数e_ii反映同一时段内电价变化对本时段负荷的影响。通常是负值因为电价上涨用户会少用。交叉弹性系数e_ij反映其他时段电价变化对本时段负荷的影响。通常是正值表示峰时段电价上涨会把一部分负荷挤到谷时段。在Matlab里常见做法是把这些系数组装成多时段弹性矩阵。如果全天分成T个时段常见的是24点也可以做96点那么弹性矩阵就是一个T×T的方阵对角线上放自弹性系数非对角线放交叉弹性系数。这个矩阵是DR模型的核心输入。典型参数范围参考峰时段自弹性大约在-0.2到-0.5之间交叉弹性在0.1到0.3之间。具体取值依赖用户类型、负荷构成和电价方案论文里一般会给出复现时直接用即可。3.2 一个手动算例峰谷电价调整后负荷怎么变论文里DR模型再花哨底层都是这个弹性公式。我拿一个简单例子把计算过程走一遍这样你在Matlab里实现时就不容易出符号错误。假设某个节点原负荷1000kW采用峰谷两部制电价峰时段电价1.2元/kWh谷时段0.4元/kWh。现在要做峰谷价差拉大峰时段电价上调到1.5元谷时段下调到0.3元。用户的峰时段自弹性系数取-0.3交叉弹性系数取0.2。第一步计算各时段电价变化率峰时段电价变化率 (1.5 - 1.2) / 1.2 0.25谷时段电价变化率 (0.3 - 0.4) / 0.4 -0.25第二步计算峰时段负荷变化量。根据弹性公式峰时段负荷变化由两部分组成本时段电价上涨带来的削减自弹性以及谷时段电价下降导致的电量向谷时段转移交叉弹性ΔP_峰 P_峰 × [e_峰峰 × Δρ_峰/ρ_峰 e_峰谷 × Δρ_谷/ρ_谷] 1000 × [-0.3 × 0.25 0.2 × (-0.25)] 1000 × (-0.075 - 0.05) -125 kW也就是说峰时段负荷从1000kW削减到875kW。第三步计算谷时段负荷变化量ΔP_谷 P_谷 × [e_谷峰 × Δρ_峰/ρ_峰 e_谷谷 × Δρ_谷/ρ_谷] 1000 × [0.2 × 0.25 (-0.3) × (-0.25)] 1000 × (0.05 0.075) 125 kW谷时段负荷从1000kW增加到1125kW。整个过程对应公式ΔP_i P_i × Σ_j (e_ij × Δρ_j / ρ_j)i和j遍历所有时段。这个公式建议直接在Matlab里用一个矩阵乘法实现循环都不用写dP P0 .* (E * dRho);其中E是弹性矩阵dRho是各时段电价变化率向量。3.3 三类DR资源的差异化建模除了价格弹性模型论文里通常会再把DR资源分成三类因为它们的物理特性、调度限制和成本结构完全不同混合在一起建模会造成约束失真。可削减负荷用户允许在特定时段减少一部分用电量比如空调温度上调、照明减半。这类负荷的特点是“削了就没了”用电量不守恒但要设一个削减比例上限一般不超过该时段负荷的15%~30%否则用户舒适度受损。成本函数通常是个二次函数C_curt a × (ΔP)^2 b × ΔP反映越往下压用户越不满补偿成本越高。可转移负荷比如电动汽车充电、洗衣机运行它们只是把用电时间平移总量不变。建模的关键约束是电量守恒Σ_t ΔP_shift,t 0也就是削掉的峰时电量要转移到谷时不能凭空消失。可中断负荷通常是大工业用户签订的可中断供电合同调度方可以按合同切除指定容量的负荷。这类负荷的调度响应快但补偿单价高且每天中断次数和累计中断时长有限制。这三种资源在Matlab里的表示方式都是决策变量向量不同之处在约束条件。我在实现时是把它们分开定义的可削减负荷和可中断负荷用上限约束可转移负荷用电量平衡约束。这样的好处是后面做敏感性分析时可以单独调节某一类资源的接入比例看它对TSC的贡献。4. 供电能力求解模型与创新改进点落地4.1 从评估到优化一个耦合DR的TSC模型复现论文的关键在于把DR模型和供电能力评估“耦合”起来而不是简单地“先算TSC再把DR结果往里套”。这一点如果你读的文章没写透容易做偏。我采用的耦合方式是构造一个双层优化框架外层优化DR调度量和负荷增长因子内层做潮流校验和N-1校验。目标函数和约束条件如下以标准形式列出便于你对照实现目标函数max TSC Σ_i Σ_t P_base,i,t Σ_i ΔP_DR,i,t这里的P_base是基础负荷ΔP_DR是需求侧响应后实际可获得的负荷调整量可正可负。如果要做综合评估还可以把目标函数扩展为最大综合评分S。约束条件可以划分成四类潮流约束每个时段都要满足配电网交流潮流方程。我使用的是DistFlow模型更适合配电网前推回代求解方便。安全约束节点电压幅值在0.93~1.07倍额定电压具体范围按论文设定支路电流不超过容量上限。N-1安全校验任意一条支路断开后系统还能满足潮流和电压约束。DR资源约束各节点各时段的负荷调整量不超过资源上限可转移负荷满足电量守恒可削减负荷比例不越限。4.2 “创新改进”到底改在哪三个方向供参考因为“创新改进”是一个开放描述我复现时采用了一套改进方案框架通用你可以根据手头论文的具体方向替换。这套改进体现在三个点改进点一多时间断面的供电能力评估。传统TSC模型只有一个静态工况我把评估扩展到了24个时段的典型日场景每个时段都做潮流和N-1校验。这样做可以捕捉到DR削峰对全天运行安全性的影响——比如某个方案在12:00峰值时没问题但晚上光伏出力下降、负荷又高可能就卡在19:00这个断面上。多断面评估更能反映真实运行情况。改进点二DR经济成本计入综合评估。很多文献只算DR技术潜力不核算调度成本。我把用户响应补偿成本和系统网损成本一起纳入综合评分让优化结果在“供电能力强”和“成本可控”之间折中。这样得到的TSC更客观也更符合工程实际约束。改进点三指标体系与优化模型联动。不是等优化结束再算指标而是把指标作为优化目标函数的组成部分让优化过程直接反映综合性能。我用加权的方式把TSC、网损、DR成本、电压合格率合成一个综合目标算法自动寻找平衡点。4.3 求解方法选择为什么我推荐PSO这个模型是非线性、非凸、多约束的混合整数优化问题Matlab自带的fmincon在多时段、带N-1校验的前提下很容易陷入局部最优而且对初值极其敏感。我复现时用的是粒子群优化PSO主要原因有三个实现简单不需要求梯度不需要保证目标函数光滑只要能把适应度函数写出来就行。全局搜索能力强对非线性问题PSO在中等规模解空间上的表现比传统梯度方法稳定。约束处理灵活可以用罚函数把各类约束转成惩罚项加到适应度里代码结构清晰。PSO的代价是计算量大尤其在带N-1校验的多时段模型里。后面我会详细讲怎么控制这个计算量。5. Matlab实现的核心模块划分与代码逻辑5.1 先搭架子六个模块各司其职Matlab代码不要一上来就写一个大脚本这会让调试非常痛苦。我把整个项目拆成六个模块每个模块一个函数或一个脚本数据流是单向的改一个模块不影响其他模块模块功能关键文件/函数数据输入读取IEEE 33节点等系统的拓扑、阻抗、负荷数据loadCase.mDR模型根据电价、弹性矩阵计算各节点各时段的负荷调整量demandResponse.m潮流计算前推回代法求解径向配电网潮流backwardForwardSweep.m指标计算计算TSC、网损、电压合格率、N-1通过率等指标calIndicators.m优化求解PSO迭代求解DR调度量与最大供电能力psoTSC.m后处理输出表格、绘制负荷曲线和电压分布图plotResults.m5.2 数据输入IEEE 33节点的坑复现配电网类论文IEEE 33节点系统是首选测试系统参数网上到处都是。但我踩过一个坑不同文献给出的阻抗数据单位不一致有的是欧姆有的是标幺值有的基准容量又不同。强烈建议第一步就统一归算到标幺值基准容量选SB10MVA基准电压UB12.66kV针对IEEE 33节点系统然后在潮流计算函数里全程使用标幺值。数据结构建议这样组织% 节点数据编号、类型1为平衡节点0为PQ节点、有功、无功、电压上下限 Bus struct(num, num2cell(1:33), ... type, num2cell(ones(33,1)), ... PL, num2cell(loadData(:,1)), ... QL, num2cell(loadData(:,2)), ... Vmin, num2cell(0.93*ones(33,1)), ... Vmax, num2cell(1.07*ones(33,1))); % 支路数据首端、末端、电阻、电抗、容量 Branch struct(from, num2cell(branchData(:,1)), ... to, num2cell(branchData(:,2)), ... r, num2cell(branchData(:,3)), ... x, num2cell(branchData(:,4)), ... cap, num2cell(branchData(:,5)));主网线额定电压是12.66kV的话对应到标幺值基准阻抗就是1公式是Z_base UB^2 / SB。算完记得检查一下33节点系统总负荷大约是3715kW 2300kvar如果标幺值化后数值偏差太大多半是单位或基准值出错。5.3 潮流计算前推回代法的核心逻辑配电网是辐射状结构用前推回代法最合适比牛拉法收敛更稳。核心逻辑分两步来回迭代回代从末梢节点向根节点根据节点注入功率和已知电压逐段计算支路功率。前推从根节点向末梢节点用支路功率和电压降逐段更新节点电压。直到两次迭代电压差的最大值小于容差比如1e-6就认为收敛。核心函数骨架如下function [V, iter] backwardForwardSweep(Bus, Branch, V0, tol, maxIter) % 前推回代法求解辐射状配电网潮流 % 输入: Bus-节点结构体, Branch-支路结构体, V0-初始电压(标幺值) N length(Bus); V ones(N, 1) * V0; S (Bus.PL 1j * Bus.QL) / 1000; % 转成标幺值(MW/Mvar) for iter 1:maxIter V_old V; % 回代计算各支路末端注入功率从末端向根累加 BranchS zeros(length(Branch), 1); % 这里按拓扑顺序从末梢向上累加节点功率 for k length(Branch):-1:1 child Branch(k).to; BranchS(k) S(child) BranchS(k) abs(BranchS(k))^2 * (Branch(k).r 1j*Branch(k).x) / abs(V(child))^2; end % 前推计算各节点电压从根向末梢更新 for k 1:length(Branch) parent Branch(k).from; child Branch(k).to; I conj(BranchS(k)) / conj(V(parent)); V(child) V(parent) - (Branch(k).r 1j*Branch(k).x) * I; end if max(abs(V - V_old)) tol break; end end end注意代码里我用标幺值处理容量基准是10MVA但IEEE 33节点原始数据本身有功负荷单位是kW接入前要换算。另外节点的PL和QL在每一个时段都可能不同所以潮流计算函数要在每个时段内循环调用DR后负荷向量传入后再算一次。5.4 优化求解PSO跑TSC的主流程PSO的实现不复杂关键在于把适应度函数写对。我在复现时每个粒子的位置向量就是各节点各时段的DR负荷调整量然后适应度函数内部分三步走根据位置向量更新负荷数据循环全天24个时段调用潮流计算函数记录电压、支路潮流、网损统计各指标计算N-1通过率、综合评分加上罚函数返回适应度值。核心代码如下function fitness evalFitness(x, Bus, Branch, caseData) % x: 粒子位置维度 节点数 × 时段数 × 3可削减/可转移/可中断 % 1. 更新负荷 [BusNew, penalty] updateLoad(Bus, x, caseData); % 2. 调潮流累积指标 netLoss 0; vQualify 0; n1Pass 0; for t 1:24 [Vt] backwardForwardSweep(BusNew(t), Branch, 1.0, 1e-6, 50); netLoss netLoss calLoss(Branch, Vt); vQualify vQualify sum(Vt 0.93 Vt 1.07); n1Pass n1Pass checkN1(BusNew(t), Branch); end % 3. 组装指标与罚函数 fitness calScore(-netLoss, vQualify/33/24, n1Pass/32/24, penalty); endPSO主循环的骨架for gen 1:maxGen w 0.9 - (0.9 - 0.4) * gen / maxGen; % 惯性权重线性递减 for i 1:nPop v(i,:) w * v(i,:) c1*rand*(pbest(i,:) - x(i,:)) ... c2*rand*(gbest - x(i,:)); x(i,:) x(i,:) v(i,:); x(i,:) max(xmin, min(xmax, x(i,:))); f(i) evalFitness(x(i,:), Bus, Branch, caseData); if f(i) f_pbest(i) pbest(i,:) x(i,:); f_pbest(i) f(i); end if f(i) f_gbest gbest x(i,:); f_gbest f(i); end end record(gen) f_gbest; end参数建议种群数50~80迭代次数100~200学习因子c1c22.0惯性权重从0.9线性递减到0.4。这些参数在33节点系统上通常能稳定收敛但如果你改到119节点或者加了N-1校验计算时间会成倍增长要把迭代次数适当降下来。6. 复现过程中的关键问题与调试经验6.1 潮流不收敛先查数据再查算法我复现时第一次跑出NaN第一反应是前推回代法写错了。排查了半天最后发现是IEEE 33节点数据里支路阻抗单位没转换导致标幺值差了1000倍。这个经验后面反复验证过配电网潮流计算90%的不收敛问题都是数据问题不是算法问题。具体检查顺序建议按这个来支路阻抗是不是统一标幺值基准阻抗Z_base UB^2 / SBUB12.66kVSB10MVA时Z_base 12.66^2 / 10 16.0276 Ω。原始数据里的0.0922ΩIEEE 33首段转成标幺值大约是0.0057。负荷数据是不是MW/Mvar单位如果原始数据是kVA/kvar要除以1000再除以基准容量。根节点电压设了吗前推回代法根节点电压按1.0标幺值设置如果没有松弛节点潮流永远收敛不了。6.2 N-1校验时间爆炸别盲目枚举带N-1校验的综合评估最大的噩梦就是计算时间。33节点系统有32条支路每条支路断开跑一次潮流每个时段就是32次24个时段就是768次潮流。看起来不多但PSO要迭代100次、种群50个粒子就是768 × 100 × 50 384万次潮流这在Matlab里跑起来需要几个小时。我在实际项目中做了两个优化计算时间降了一个数量级孤岛预筛选断开某些末端支路后系统会直接形成孤岛部分节点失电这种支路可以直接判定N-1不通过不用跑潮流。对33节点系统来说大约三分之一支路都可以这样筛掉。只校验关键断面不是所有支路都值得做N-1校验可以先跑一次正常潮流把负载率最高的那批支路比如前50%标记为关键支路只对这些支路做断线校验。这在工程上是可接受的近似但论文里写到方法部分时要说明清楚不然会被审稿人抓。6.3 PSO随机性的坑固定随机数种子PSO是随机算法同样的代码每次跑出来的结果可能差3%~5%。我复现的时候第一次没固定随机种子连续跑三次TSC结果分别是8.1MW、8.4MW、7.9MW直接拿去和基准方案对比根本说不清楚差异是算法波动还是模型改进带来的。解决办法很简单在main脚本开头加一行rng(42);固定随机数种子后每次运行结果可复现。写论文之前记得把种子写进参数表。另外我建议每个算例跑5次取最优值或平均值作为最终结果这样更稳健。6.4 弹性系数不靠谱怎么办敏感性分析需求价格弹性系数是DR模型里最“虚”的参数不同文献取值差别很大。如果你用某个文献的弹性系数算出一个漂亮的TSC提升率审稿人或导师大概率会问“这个弹性系数凭什么这么取”应对办法就是做敏感性分析。具体做法把弹性系数在基准值基础上上下浮动20%重新跑几次优化看TSC提升率的变化范围。如果TSC对弹性系数非常敏感说明结论依赖参数假设需要在论文里说明如果TSC变化不大说明模型鲁棒性好。我在33节点系统上实际跑下来自弹性系数在-0.2到-0.5之间变化时TSC提升率大概在5%~14%之间波动这个区间是合理的。如果超出这个范围太多基本可以判断模型里有约束写错或者参数超出了物理实际。6.5 结果合理性验证用小系统手算反推复现完成后一定要验证代码结果的正确性不能单纯看“能跑出数”就交差。最有效的办法是先在一个小系统比如3节点或5节点手算系统上做测试把优化出来的DR调度量代入潮流方程手算一遍电压和功率看是否满足约束。如果直接用33节点系统你很难判断某个数对不对。我自己的习惯是先关掉DR把模型退化成传统TSC模型用一个小系统跟手算结果对比——TSC应该等于最小瓶颈支路的极限供带能力如果对不上就去查代码里的约束或者潮流部分。另一个快速检查点DR后的总用电量在只有可转移负荷、没有可削减负荷的情况下应该等于DR前的总用电量电量守恒。如果总用电量凭空多了或少了说明电量平衡约束没写对。7. 实际操作中的最终体会这个项目复现下来我最深的体会是论文复现的难点从来不在代码本身而在于论文里一笔带过的“模型假设”。需求侧响应怎么建模、供电能力怎么定义、综合评估用什么指标框架这些才是决定代码结构的关键。Matlab只是把模型翻译成机器能算的形式模型想清楚了代码怎么写都好办模型没想清楚代码改来改去还是会崩。如果你正准备复现这篇论文我建议按这个顺序走先用Excel或手算把第3节的那个弹性模型算例跑通感受一下负荷调整量的数量级然后用IEEE 33节点系统把不带DR的基态潮流跑通确认自己的前推回代法没问题最后再一步步加入DR调度模块和PSO优化。这样出了问题你知道该去查哪个模块而不是对着几百行代码发呆。最后分享一个调参小技巧PSO跑出来的最优结果先用DR全关的退化场景检验一遍——如果DR全关时优化后的TSC比不带优化的基础供电能力还低那一定是罚函数权重设置错了。罚函数权重太小约束被无视粒子会跑到不满足电压约束的“伪最优解”权重太大收敛极慢。我一般是从罚函数权重等于目标函数权重开始调然后十倍步长向上加直到约束违例量降到可以接受的范围。这一步多花半小时后面能省一整天。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门