电网调度优化学习笔记:不考虑经济损耗的调度方式(算例代码求解)
電氣博文傳送門
學好電氣全靠它,個人電氣博文目錄(持續更新中…)
題:
例題:
python代碼求解 :
思路上面就有,照著敲吧。
主要是為了學習下python 求解優化問題和學習下電網調度。在這之前很少涉足這來。
工具包介紹
非線性規劃(scipy.optimize.minimize)
一.背景:
現在項目上有一個用python 實現非線性規劃的需求。非線性規劃可以簡單分兩種,目標函數為凸函數 or 非凸函數。
凸函數的 非線性規劃,比如fun=x2+y2+x*y,有很多常用的python庫來完成,網上也有很多資料,比如CVXPY
非凸函數的 非線性規劃(求極值),從處理方法來說,可以嘗試以下幾種:
1.純數學方法,求導求極值;
2.使用神經網絡,深度學習來處理,可參考反向傳播算法中鏈式求導的過程;
3.尋找一些python庫來做,本文介紹scipy.optimize.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)
解釋:
fun: 求最小值的目標函數
x0:變量的初始猜測值,如果有多個變量,需要給每個變量一個初始猜測值。minimize是局部最優的解法,所以
args:常數值,后面demo會講解,fun中沒有數字,都以變量的形式表示,對于常數項,需要在這里給值
method:求極值的方法,官方文檔給了很多種。一般使用默認。每種方法我理解是計算誤差,反向傳播的方式不同而已,這塊有很大理論研究空間
constraints:約束條件,針對fun中為參數的部分進行約束限制
代碼:
# coding=utf-8 from scipy.optimize import minimize import numpy as np #目標函數 def fun(args):a1,a2,a3,b1,b2,b3,c1,c2,c3=argsv=lambda x: (a1+a2*x[0]+a3*x[0]*x[0]+b1+b2*x[1]+b3*x[1]*x[1]+c1+c2*x[2]+c3*x[2]*x[2])return vdef con(args):# 約束條件 分為eq 和ineq#eq表示 函數結果等于0 ; ineq 表示 表達式大于等于0d1, d2, d3, d4, d5, d6 ,d7= args1cons = ({'type': 'eq', 'fun': lambda x: d1+d2*x[0]-d3-d4*x[1]},\{'type': 'eq', 'fun': lambda x: d1+d2*x[0]-d5-d6*x[2]},\{'type': 'eq', 'fun': lambda x: x[0]+x[1]+x[2]-d7})return consif __name__ == "__main__":# 定義常量值args = (300,10,0.15,200,20,0.2,100,10,0.3) # a1,a2,a3,b1,b2,b3,c1,c2,c3# 設置參數范圍/約束條件args1 = (10, 0.3, 20, 0.4, 10, 0.6,320) # d1, d2, d3, d4, d5, d6,d7cons = con(args1)# 設置x初始猜測值x0 = np.array((100, 50, 100))res = minimize(fun(args), x0, method='SLSQP', constraints=cons)print(res.fun)print(res.success)print(res.x)結果:
和給出的答案一樣的。
解釋說明:
目標函數:使三臺機組的成本曲線和最小。
args 對應原始成本曲線中的數:(300,10,0.15,200,20,0.2,100,10,0.3)
后面會傳進來
約束條件
最優情況: 發電機組1成本曲線對功率求導 =發電機組2成本曲線對功率求導=發電機組3成本曲線對功率求導
為什么是求導 相等 。這個電分里教的有,最基本的,不想解釋。
發電機組1功率+發電機組2功率+發電機組3功率=負荷功率
本文約束條件可以表達為:
1.發電機組1成本曲線對功率求導 =發電機組2成本曲線對功率求導
2.發電機組1成本曲線對功率求導 =發電機組3成本曲線對功率求導
3.發電機組1功率+發電機組2功率+發電機組3功率=負荷功率
參數:
d1, d2, d3, d4, d5, d6 表示各發電機組成本曲線求導后的系數。
d7 為負荷功率
主函數:
要定義一些數值=
等于說 前面在定義目標函數和約束時全用字母代替,不能出現具體數
。具體數在后面傳入。
x0 = np.array((100, 50, 100)) 定義x初始解
res.fun 目標函數值
res.success 是否求得值
res.x 未知數的值
總結
以上是生活随笔為你收集整理的电网调度优化学习笔记:不考虑经济损耗的调度方式(算例代码求解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020年沃德118用的啥履带20年沃德
- 下一篇: 客厅装立式好还是挂式好?