完整版代码含分布式电源的配电网日前两阶段优化调度模型
Posted 电力程序小学童
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完整版代码含分布式电源的配电网日前两阶段优化调度模型相关的知识,希望对你有一定的参考价值。
目录
1 主要内容
该程序复现了《含分布式电源的配电网日前两阶段优化调度模型》-孟晓丽完整模型,包括第 1 阶段为 DG 优化调度阶段和第 2 阶段为无功优化阶段,之前发布的复现第二阶段程序链接如下:
《含分布式电源的配电网日前两阶段优化调度模型》第二阶段模型。
1.1 摘要
在电力市场环境下,供电公司通过对接入配电网的分布式电源(distributed generation,DG)的优化调度,能够有效地降低其运行成本,规避市场竞争环境下的风险。提出了一种电力市场环境下供电公司日前优化调度的 2 阶段模型:第 1 阶段为 DG 优化调度阶段,根据市场电价、DG运行成本、签订可中断负荷(interruptable load,IL)合同的价格来确定 DG 的机组组合、从大电网的购电量及 IL 削减量;第 2 阶段为无功优化阶段,在第 1 阶段的基础上,考虑 DG 的无功出力特性,通过优化 DG 和无功补偿装置的出力调节电压使其在规定的范围内且配电网的网损最小。通过基于修改的 IEEE 33 节点系统的仿真计算,表明所提出的日前 2 阶段优化调度模型能够有效降低供电公司的运行成本。
1.2 具体模型
- 第一阶段目标函数:
- 第一阶段约束条件:
有功平衡约束
系统备用约束
DG出力、爬坡、最小启停时间约束
大电网购电约束
IL合同约束
【思考】在复现第一阶段模型过程中,遇到几点疑问以及处理方式如下:
1.算例写明标准IEEE33节点配电系统总负荷为5084.26+j2547.32kVA
一般更常用的是总有功为3715kW的IEEE33节点数据文件,因此对负荷数据部分按照比例进行了调整。
2.系统备用约束增加了Rt作为新的变量,文章并没有给出Rt的其他约束形式,相当于这个约束失去了意义。
3.该模型忽略了一个关键的问题,本来为配电网模型,但是第一阶段完全是按照微网模型表达的,没有计及二阶锥约束、电压电流约束等配电网特征的约束,为了尽量靠近33节点模型,程序采用二阶锥约束形式的配电网模型。
4.一个小问题,图3有功功率单位标注出错。
5.结果图5和图6两部分功率加起来已经严重超过系统总负荷8MW(见图3),再叠加分布式电源出力,总供应功率远大于负荷功率,结果部分准确性存疑。
- 第二阶段目标函数如下:即网损和节点电压越限罚函数之和。
- 第二阶段约束条件如下:
潮流约束
节点电压约束
DG 无功补偿约束
无功补偿器容量约束
对于第 2 阶段,含分布式电源的配电网无功优化问题目标复杂、约束多,是一个多维的非线性优化问题,本文采用粒子群算法(particle swarm optimization,PSO)来求解。算法主要由潮流计算和优化两部分组成。其中潮流计算为优化计算提供状态变量的值和网损;优化部分主要完成粒子群算法中每代粒子的更新。
1.3 网架结构
本程序研究的33节点网架结构如下:
2 部分程序
x_Iij_square=sdpvar(32,N,'full');%电流平方 x_ui_square=sdpvar(33,N,'full');%电压平方 x_pij=sdpvar(32,N,'full');%线路有功功率 x_qij=sdpvar(32,N,'full');%线路无功功率 x_Pdg=sdpvar(3,N,'full');%dg功率 u_Pdg=binvar(3,N,'full');%dg出力状态 x_Pil=sdpvar(2,N,'full');%切负荷功率 u_Pil=binvar(2,N,'full');%切负荷状态 x0_ug=binvar(3,N,'full');%机组启动 x0_vg=binvar(3,N,'full');%机组停止 x_R=sdpvar(1,N,'full');%备用负荷 %% 定义约束条件 Constraints=[]; P_dg=sdpvar(33,24,'full');%将dg出力情况放入对应的节点 for i=1:33 if i==7 Constraints=[Constraints,P_dg(i,:)==x_Pdg(1,:)]; elseif i==24 Constraints=[Constraints,P_dg(i,:)==x_Pdg(2,:)]; elseif i==25 Constraints=[Constraints,P_dg(i,:)==x_Pdg(3,:)]; else Constraints=[Constraints,P_dg(i,:)==0]; end end P_il=sdpvar(33,24,'full');%将IL合同约束放入对应的节点 for i=1:33 if i==8 Constraints=[Constraints,P_il(i,:)==x_Pil(1,:)]; elseif i==25 Constraints=[Constraints,P_il(i,:)==x_Pil(2,:)]; else Constraints=[Constraints,P_il(i,:)==0]; end end Constraints=[Constraints,x_ui_square(1,:)==12.66^2]; %平衡节点每小时电压平方 Constraints=[Constraints,x_Iij_square>=0]; % Constraints=[Constraints,x_pij(1,:)>=0]; %% 支路欧姆定律 for r=1:32 Constraints=[Constraints,x_ui_square(Branch(r,2),:)-... x_ui_square(Branch(r,3),:)+(r_ij(r)^2+x_ij(r)^2)*x_Iij_square(r,:)-... 2*(r_ij(r)*x_pij(r,:)+x_ij(r)*x_qij(r,:))==0]; end %dg爬坡约束 for t=1:23 for i=1:3 Constraints=[Constraints,x_Pdg(i,t+1)-x_Pdg(i,t)<=vup]; Constraints=[Constraints,x_Pdg(i,t)-x_Pdg(i,t+1)<=vdn]; end end %IL合同约束 Constraints=[Constraints,0<=x_Pil<=Pilmax.*u_Pil]; %dg最小启停时间约束 for i=1:3 Constraints=[Constraints,consequtiveON([onoffhistory(i,:) u_Pdg(i,:)],Tmup)]; Constraints=[Constraints,consequtiveON(1-[onoffhistory(i,:) u_Pdg(i,:)],Tmd)]; end for t=2:N%公式7
3 程序结果
4 程序链接
布局优化基于粒子群算法求解配电网重构matlab源码
传统配电网的运行优化问题主要涉及发电机机端电压的调整、变压器分接头的调节和电容器容量的配置。在接入分布式电源和储能装置之后,配电网的优化问题还将包括对分布式电源和储能装置的控制。配电网运行优化问题的目标函数主要有最小化系统的有功功率损耗,减少设备的运行成本等等。优化变量包括连续型变量即分布式电源和储能装置的有功无功等,离散型变量即变压器的分接头和电容器的投切组数,接入设备的位置和容量等。约束条件主要有1.发电机机端电压的最大最小限制2.变压器分接头的档位限制以及电容器的容量限制3.变压器和电容器每日最大操作数的限制, 4. 分布式电源和储能装置的有功无功功率约束等。综合配电网优化的目标函数、变量以及约束条件,该优化问题可以看作是一个多目标、多变量的混合整数非线性规划问题。
针对配电网的优化问题,目前主要的求解方法有传统的数学优化方法和人工智能方法。传统的数学优化方法主要包括线性/非线性规划法、动态规划法等,而人工智能方法主要包括遗传算法、模拟退火法和粒子群优化算法等。传统的优化算法从全局考虑整个优化问题,原理严格,计算时间较短。但是对目标函数和优化变量的初值要求较高。人工智能算法对目标函数和初值的要求不高,并且能够求解高维度的优化问题,其缺点是容易陷入局部最优,计算时间较长。
综上,配电网的优化方向主要内容有:(1)含分布式发电设备与储能设备的运行方式研究(2)配电网中接入的分布式发电设备与储能装置的安装位置和容量的选择(3)综合考虑分布式发电设备以及储能装置的运行与规划的优化问题研究
粒子群算法
粒子群算法是在1995年由Eberhart博士和Kennedy博士一起提出的,它源于对鸟群捕食行为的研究。它的基本核心是利用群体中的个体对信息的共享从而使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得问题的最优解。设想这么一个场景:一群鸟进行觅食,而远处有一片玉米地,所有的鸟都不知道玉米地到底在哪里,但是它们知道自己当前的位置距离玉米地有多远。那么找到玉米地的最佳策略,也是最简单有效的策略就是搜寻目前距离玉米地最近的鸟群的周围区域。
在PSO中,每个优化问题的解都是搜索空间中的一只鸟,称之为"粒子",而问题的最优解就对应于鸟群中寻找的"玉米地"。所有的粒子都具有一个位置向量(粒子在解空间的位置)和速度向量(决定下次飞行的方向和速度),并可以根据目标函数来计算当前的所在位置的适应值(fitness value),可以将其理解为距离"玉米地"的距离。在每次的迭代中,种群中的例子除了根据自身的经验(历史位置)进行学习以外,还可以根据种群中最优粒子的"经验"来学习,从而确定下一次迭代时需要如何调整和改变飞行的方向和速度。就这样逐步迭代,最终整个种群的例子就会逐步趋于最优解。
上面的解释可能还比较抽象,下面通过一个简单的例子来进行说明
在一个湖中有两个人他们之间可以通信,并且可以探测到自己所在位置的最低点。初始位置如上图所示,由于右边比较深,因此左边的人会往右边移动一下小船。
现在左边比较深,因此右边的人会往左边移动一下小船
一直重复该过程,最后两个小船会相遇
得到一个局部的最优解
将每个个体表示为粒子。每个个体在某一时刻的位置表示为,x(t),方向表示为v(t)
p(t)为在t时刻x个体的自己的最优解,g(t)为在t时刻所有个体的最优解,v(t)为个体在t时刻的方向,x(t)为个体在t时刻的位置
下一个位置为上图所示由x,p,g共同决定了
种群中的粒子通过不断地向自身和种群的历史信息进行学习,从而可以找到问题的最优解。
但是,在后续的研究中表表明,上述原始的公式中存在一个问题:公式中V的更新太具有随机性,从而使整个PSO算法的全局优化能力很强,但是局部搜索能力较差。而实际上,我们需要在算法迭代初期PSO有着较强的全局优化能力,而在算法的后期,整个种群应该具有更强的局部搜索能力。所以根据上述的弊端,shi和Eberhart通过引入惯性权重修改了公式,从而提出了PSO的惯性权重模型:
每一个向量的分量表示如下
其中w称为是PSO的惯性权重,它的取值介于【0,1】区间,一般应用中均采用自适应的取值方法,即一开始令w=0.9,使得PSO全局优化能力较强,随着迭代的深入,参数w进行递减,从而使的PSO具有较强的局部优化能力,当迭代结束时,w=0.1。参数c1和c2称为学习因子,一般设置为1,4961;而r1和r2为介于[0,1]之间的随机概率值。
整个粒子群优化算法的算法框架如下:
step1种群初始化,可以进行随机初始化或者根据被优化的问题设计特定的初始化方法,然后计算个体的适应值,从而选择出个体的局部最优位置向量和种群的全局最优位置向量。
step2 迭代设置:设置迭代次数,并令当前迭代次数为1
step3 速度更新:更新每个个体的速度向量
step4 位置更新:更新每个个体的位置向量
step5 局部位置和全局位置向量更新:更新每个个体的局部最优解和种群的全局最优解
step6 终止条件判断:判断迭代次数时都达到最大迭代次数,如果满足,输出全局最优解,否则继续进行迭代,跳转至step 3。
对于粒子群优化算法的运用,主要是对速度和位置向量迭代算子的设计。迭代算子是否有效将决定整个PSO算法性能的优劣,所以如何设计PSO的迭代算子是PSO算法应用的研究重点和难点。
function main()
clear,clc
disp('请输入粒子数');
n = input('');
Y = CreatPSO(n);
for i = 1:n
disp(['第 ',num2str(i),' 个粒子']);
disp(Y(i,:));
[loss(i),minV(i)] = PLoss(Y(i,:));
end
least = min(loss);
leastIndex = find(loss == least);
disp(['网损最小的粒子为第( ',num2str(leastIndex),' )个粒子']);
disp('粒子为值为');
disp(Y(leastIndex,:));
disp(['网损有功功率P最小为( ',num2str(least),' )kW']);
disp(['节点电压p.u最小为 ',num2str(minV(leastIndex))]);
disp('网络拓扑见图');
figure(2);
Read(Y(leastIndex,:));
end
以上是关于完整版代码含分布式电源的配电网日前两阶段优化调度模型的主要内容,如果未能解决你的问题,请参考以下文章
配电网优化基于matlab GUI配电网潮流计算与经济调度模糊满意度评价含Matlab源码 2159期