给书配代码-电力经济调度(2):计及动态约束及节能环保要求的经济调度
電氣博文傳送門
學好電氣全靠它,個人電氣博文目錄(持續更新中…)
本博文系列為我解讀電力調度書籍,然后根據自己的理解配上程序。
知識點
1.動態模型
電力經濟調度(ED)通常只針對一個時段進行優化,如果計人發電機組的跨時段約束,如爬坡率限制等,它將變為如下的動態模型。
2.適應節能環保需求的經濟調度擴展模型
對于火電機組,節能要求主要反映在一段時間的總能耗需控制在一-定范圍內, 為此得到擴展模型如下
算例
書上給的答案
程序實現(語言python)
電力經濟調度程序復現(1):基于拉格朗日及運籌規劃方法的經濟調度算法
1.機組運行參數求解
第一臺機組運行參數求解(把100-200之間分為4段,每25一段)
和書上給的答案很相近
第二臺機組運行參數求解(把120-250之間分為2段,(100-220),(220-250)
import numpy as np x0=np.arange(120,251,1)#120-250的整數 y=3+0.32*x0+0.0004*x0*x0 #線性規劃參數 print('b',3+0.32*120+0.0004*120*120) print('PI21階段參數',((3+0.32*220+0.0004*220*220)-(4+0.32*100+0.0004*100*100))/(220-100)) print('PI22階段參數',((3+0.32*250+0.0004*250*250)-(3+0.32*220+0.0004*220*220))/(250-220))第三臺機組運行參數求解(分成3段,(200-150),(250-200),(300-250)
import numpy as np x0=np.arange(150,301,1)#150-300的整數 y=3.5+0.3*x0+0.00045*x0*x0 plt.plot(x0,y) plt.title('第三臺機組運行曲線FG3') plt.show()#線性規劃參數 print('b',3.5+0.3*150+0.00045*150*150) print('PI31階段參數',((3.5+0.3*200+0.00045*200*200)-(3.5+0.3*150+0.00045*150*150))/(200-150)) print('PI32階段參數',((3.5+0.3*250+0.00045*250*250)-(3.5+0.3*200+0.00045*200*200))/(250-200)) print('PI33階段參數',((3.5+0.3*300+0.00045*300*300)-(3.5+0.3*250+0.00045*250*250))/(300-250))2運行求解
我使用非線性規劃來求解
scipy.optimize 中t minimize
官方文檔:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html
來看下改方法的入參
scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Author: yudengwu(余登武) # @Date : 2021/2/22 #@email:1344732766@qq.com # -*- coding: utf-8 -*- from scipy import optimize as opt import numpy as np from scipy.optimize import minimize # 目標函數 def objective(x): #=原文中的mincost #式子3-17#500*(41+x[0]*0.456+x[1]*0.496+x[2]*0.524+x[3]*0.564)為第一臺機組第一小時購煤成本#550*(47.2+x[4]*0.456+x[5]*0.508) 為第二臺機組第一小時購煤成本#600*(58.6+x[6]*0.458+x[7]*0.502+x[8]*0.548)為第三臺機組第一小時購煤成本#500*(41+x[9]*0.456+x[10]*0.496+x[11]*0.524+x[12]*0.564)為第一臺機組第二小時購煤成本#550*(47.2+x[13]*0.456+x[14]*0.508) 為第二臺機組第二小時購煤成本#600 * (58.6 + x[15] * 0.458 + x[16] * 0.502 + x[17] * 0.548)為第三臺機組第二小時購煤成本return 500*(41+x[0]*0.456+x[1]*0.496+x[2]*0.524+x[3]*0.564)+550*(47.2+x[4]*0.456+x[5]*0.508)+600*(58.6+x[6]*0.458+x[7]*0.502+x[8]*0.548)+\500*(41+x[9]*0.456+x[10]*0.496+x[11]*0.524+x[12]*0.564)+550*(47.2+x[13]*0.456+x[14]*0.508)+600*(58.6+x[15]*0.458+x[16]*0.502+x[17]*0.548)# # 約束條件def constraint1(x):#式子3-18return 100+x[0]+x[1]+x[2]+x[3]+120+x[4]+x[5]+150+x[6]+x[7]+x[8]-700 #等式約束,第一小時,三臺機組 輸出和為700MWdef constraint2(x):#式子3-18return 100+x[9]+x[10]+x[11]+x[12]+120+x[13]+x[14]+150+x[15]+x[16]+x[17]-500 #等式約束,第二小時,三臺機組 輸出和為500MW#邊界約束 式子3-19b1=(0.0,25)#0<=x[0,1,2,3]<=25 ,0<=x[9,10,11,12]<=25,PG1 b2=(0.0,100)#0<=x[4]<=100 x21min=0,x21max=100, 0<=x[13]<=100 PG2的約束 b3=(0.0,30)#0<=x[5]<=30 x22min=0,x22max=30 0<=x[14]<=30 PG2的約束 b4=(0.0,50)##0<=x[6,7,8]<=50 x3min=0,x3max=50 0<=x[15,16,17]<=50 PG3的約束bnds = (b1,b1,b1,b1,b2,b3,b4,b4,b4,b1,b1,b1,b1,b2,b3,b4,b4,b4)#邊界約束 式子3-19#機組1爬坡約束 式子3-20 def constraint3(x):return x[9]+x[10]+x[11]+x[12]-x[0]-x[1]-x[2]-x[3]+50 #不等式約束,機組1的爬坡功率約束為50MW #機組2爬坡約束 式子3-20 def constraint4(x):return x[13]+x[14]-x[4]-x[5]+60 #不等式約束,機組2的爬坡功率約束為60MW #機組3爬坡約束式子3-20 def constraint5(x):return x[15]+x[16]+x[17]-x[6]-x[7]-x[8]+150#不等式約束,機組3的爬坡功率約束為150MW#第一臺機組在第一小時消耗煤炭不超過70t 式子3-22 def constraint6(x):return 70-(41+x[0]*0.456+x[1]*0.496+x[2]*0.524+x[3]*0.564) #不等式約束#所有機組在二小時內總的SO2的排放量不超過8t,式子3-23,3-24def constraint7(x):return 8-0.02*(41+x[0]*0.456+x[1]*0.496+x[2]*0.524+x[3]*0.564)-0.02*(41+x[9]*0.456+x[10]*0.496+x[11]*0.524+x[12]*0.564)-\0.015*(47.2+x[4]*0.456+x[5]*0.508)-0.015*(47.2+x[13]*0.456+x[14]*0.508)-\0.01*(58.6+x[6]*0.458+x[7]*0.502+x[8]*0.548)-0.01*(58.6+x[15]*0.458+x[16]*0.502+x[17]*0.548) #不等式約束 #所有機組在二小時內總的SO2的排放量大于0t,式子3-23,3-24 def constraint8(x):return 0.02*(41+x[0]*0.456+x[1]*0.496+x[2]*0.524+x[3]*0.564)+0.02*(41+x[9]*0.456+x[10]*0.496+x[11]*0.524+x[12]*0.564)+\0.015*(47.2+x[4]*0.456+x[5]*0.508)+0.015*(47.2+x[13]*0.456+x[14]*0.508)+\0.01*(58.6+x[6]*0.458+x[7]*0.502+x[8]*0.548)+0.01*(58.6+x[15]*0.458+x[16]*0.502+x[17]*0.548) #不等式約束if __name__ =='__main__':con1 = {'type': 'eq', 'fun': constraint1}con2 = {'type': 'eq', 'fun': constraint2}con3 = {'type': 'ineq', 'fun': constraint3}con4 = {'type': 'ineq', 'fun': constraint4}con5 = {'type': 'ineq', 'fun': constraint5}con6 = {'type': 'ineq', 'fun': constraint6}con7 = {'type': 'ineq', 'fun': constraint7}con8 = {'type': 'ineq', 'fun': constraint8}cons = ([con1, con2, con3, con4, con5, con6, con7, con8]) # 8個約束條件# 初始值x0 = np.random.uniform(10, 40, 18)# 計算solution = minimize(objective, x0, method='SLSQP', \bounds=bnds, constraints=cons)x = solution.xprint('目標值: ' + str(objective(x)))print('答案為')print('第一小時PG1', x[0] + x[1] + x[2] + x[3] + 100)print('第一小時PG2', x[4] + x[5] + 120)print('第一小時PG3', x[6] + x[7] + x[8] + 150)print('--------------')print('第二小時PG1', x[9] + x[10] + x[11] + x[12] + 100)print('第二小時PG2', x[13] + x[14] + 120)print('第二小時PG3', x[15] + x[16] + x[17] + 150)答案和書上的答案一模一樣
進階版論文鏈接:電氣期刊論文實現:考慮排放目標和輸電損耗的經濟調度【有代碼】
作者:電氣-余登武。寫作不容易,請點個贊再走。
總結
以上是生活随笔為你收集整理的给书配代码-电力经济调度(2):计及动态约束及节能环保要求的经济调度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广发银行是国企吗
- 下一篇: 给书配代码-电力经济调度(3):计及网络