给书配代码-电力经济调度(4):有功与辅助服务联合经济调度

知识点

电力市场环境中,辅助服务包括备用、无功和黑启动等,其中,无功和黑启动一般都通过与发电公司签订中长期合同提供,备用服务则可通过竞价或长期合同两种方式提供,当采用竞价方式时,由于备用市场与日前有功市场有很强的关联性,在市场交易决策上必须协调它们的相互关系,通常将交易决策方法分为优先级排序决策法、顺序交易决策法、联合交易决策法和混合交易决策法等几种。

(1)优先级排序决策法。该法是将有功、AGC、旋转备用、非旋转备用、替代备用五种电力商品视为独立竞争的分离市场,通过优先级排序即可得到满足各自市场需求的成交结果。它的优点是简单,便于理解,算法易于实现;缺点是没有考虑到各类电力商品间的耦合性,调度方案可能不可行,比如机组同时提供有功与备用时,总和可能超过机组容量限制。因而此种方法在实用上难以推行。

(2)顺序交易决策法。该法根据各类市场重要程度的不同,按一定先后次序对各个市场进行单独交易决策。每个市场交易决策都以该市场购买费用最低为目标。它的优点是各市场间基本不存在耦合问题,每个决策过程都可以保证该市场内部的公平与透明;缺点是只保证了局部市场购买费用最低,而所有市场的购买费用之和不–定最低。此外,该决策法中,市场的交易顺序很重要,优先进行决策的市场,往往会剥夺一些市场成员在下一个市场中竞争的权利。因而,顺序的排列涉及市场整体公平性。
(3)联合交易决策法。该法是将各类市场的决策过程统-进行, 以各市场的综合购买费用最低为目标。但缺点是各类市场的决策过程相互影响,决策算法比较复杂,交易结果不便于分析和判断,会造成市场的清晰度和透明度都比较差,容易受到市场成员质疑,也不便于监管。
(4)混合交易决策法。该法是将顺序交易决策法与联合交易决策法混合在一起,每顺序增加一个市场,则计算该市场的清算价格,从而保证了该市场的公平性,而且最-一次的统一决策过程,又保证了最终交易结果的全局最优。因而,这种交易决策法尽管还存在着计算复杂等问题,但由于较好兼顾了公平性与经济性,从而得到一定认同。值得注意的是,随着市场化进程加快,各类辅助服务最终将从日前市场中分离出来,建立独立竞价的发电辅助市场,与日前市场并行。

本节分别从参与市场交易的电网公司和发电公司的不同角度,研究联合交易决策方法下备用服务的调度问题。

算例1

from scipy import optimize as op
import numpy as np

#目标函数
cp1=float(input('请输入第一台机组有功报价:'))
cp2=float(input('请输入第二台机组有功报价:'))
cp3=float(input('请输入第三台机组有功报价:'))
cp4=float(input('请输入第四台机组有功报价:'))
print('--------------')
PD=float(input('请输入负荷:'))
beiyong=float(input('请输入系统需要备用:'))
print('--------------')


maxPG1=float(input('请输入第一台机组出力上限:'))
maxPG2=float(input('请输入第二台机组出力上限:'))
maxPG3=float(input('请输入第三台机组出力上限:'))
maxPG4=float(input('请输入第四台机组出力上限:'))
print('--------------')
maxRG1=float(input('请输入第一台机组预留备用上限:'))
maxRG2=float(input('请输入第二台机组预留备用上限:'))
maxRG3=float(input('请输入第三台机组预留备用上限:'))
maxRG4=float(input('请输入第四台机组预留备用上限:'))

#目标函数
c=[cp1,cp2,cp3,cp4,0,0,0,0]

#等式约束
#1PG1+1PG2+1PG3+1PG4=PD
A_eq=np.array([[1,1,1,1,0,0,0,0]])
B_eq=np.array([PD])

#不等式约束
#RG1+RG2+RG3+RG4>=beiyong
#PG1+RG1<=maxPG1  PG2+RG2<=maxPG2  PG3+RG3<=maxPG3 PG4+RG4<=maxPG4

A_ub=np.array([[0,0,0,0,-1,-1,-1,-1],[1,0,0,0,1,0,0,0],[0,1,0,0,0,1,0,0],[0,0,1,0,0,0,1,0],[0,0,0,1,0,0,0,1]])
B_ub=np.array([-beiyong,maxPG1,maxPG2,maxPG3,maxPG4])

#上下限
PG1=(0,maxPG1)
PG2=(0,maxPG2)
PG3=(0,maxPG3)
PG4=(0,maxPG4)
RG1=(0,maxRG1)
RG2=(0,maxRG2)
RG3=(0,maxRG3)
RG4=(0,maxRG4)


if __name__ == "__main__":
    res = op.linprog(c, A_ub, B_ub, A_eq, B_eq, bounds=(PG1,PG2,PG3,PG4,RG1,RG2,RG3,RG4))
    x=res.x
    print('-------------求解结果-------')
    print(res.fun)
    print('PG1',x[0])
    print('PG2', x[1])
    print('PG3', x[2])
    print('PG3', x[3])
    print('RG1', x[4])
    print('RG2', x[5])
    print('RG3', x[6])
    print('RG4', x[7])


算例1

from scipy import optimize as op
import numpy as np

#目标函数
cp1=float(input('请输入第一台机组有功报价:'))
cp2=float(input('请输入第二台机组有功报价:'))
cp3=float(input('请输入第三台机组有功报价:'))
cp4=float(input('请输入第四台机组有功报价:'))
cp5=float(input('请输入第一台机组备用报价:'))
cp6=float(input('请输入第二台机组备用报价:'))
cp7=float(input('请输入第三台机组备用报价:'))
cp8=float(input('请输入第四台机组备用报价:'))
print('--------------')
PD=float(input('请输入负荷:'))
beiyong=float(input('请输入系统需要备用:'))
print('--------------')


maxPG1=float(input('请输入第一台机组出力上限:'))
maxPG2=float(input('请输入第二台机组出力上限:'))
maxPG3=float(input('请输入第三台机组出力上限:'))
maxPG4=float(input('请输入第四台机组出力上限:'))
print('--------------')
maxRG1=float(input('请输入第一台机组预留备用上限:'))
maxRG2=float(input('请输入第二台机组预留备用上限:'))
maxRG3=float(input('请输入第三台机组预留备用上限:'))
maxRG4=float(input('请输入第四台机组预留备用上限:'))

#目标函数
c=[cp1,cp2,cp3,cp4,cp5,cp6,cp7,cp8]

#等式约束
#1PG1+1PG2+1PG3+1PG4=PD
A_eq=np.array([[1,1,1,1,0,0,0,0]])
B_eq=np.array([PD])

#不等式约束
#RG1+RG2+RG3+RG4>=beiyong
#PG1+RG1<=maxPG1  PG2+RG2<=maxPG2  PG3+RG3<=maxPG3 PG4+RG4<=maxPG4

A_ub=np.array([[0,0,0,0,-1,-1,-1,-1],[1,0,0,0,1,0,0,0],[0,1,0,0,0,1,0,0],[0,0,1,0,0,0,1,0],[0,0,0,1,0,0,0,1]])
B_ub=np.array([-beiyong,maxPG1,maxPG2,maxPG3,maxPG4])

#上下限
PG1=(0,maxPG1)
PG2=(0,maxPG2)
PG3=(0,maxPG3)
PG4=(0,maxPG4)
RG1=(0,maxRG1)
RG2=(0,maxRG2)
RG3=(0,maxRG3)
RG4=(0,maxRG4)


if __name__ == "__main__":
    res = op.linprog(c, A_ub, B_ub, A_eq, B_eq, bounds=(PG1,PG2,PG3,PG4,RG1,RG2,RG3,RG4))
    x=res.x
    print('-------------求解结果-------')
    print(res.fun)
    print('PG1',x[0])
    print('PG2', x[1])
    print('PG3', x[2])
    print('PG3', x[3])
    print('RG1', x[4])
    print('RG2', x[5])
    print('RG3', x[6])
    print('RG4', x[7])


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kobeyu652453/article/details/114661983