日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

电网调度优化学习笔记:不考虑经济损耗的调度方式(算例代码求解)

發布時間:2024/9/30 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 电网调度优化学习笔记:不考虑经济损耗的调度方式(算例代码求解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

電氣博文傳送門
學好電氣全靠它,個人電氣博文目錄(持續更新中…)
題:

例題:

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)
后面會傳進來

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 v

約束條件
最優情況: 發電機組1成本曲線對功率求導 =發電機組2成本曲線對功率求導=發電機組3成本曲線對功率求導
為什么是求導 相等 。這個電分里教的有,最基本的,不想解釋。
發電機組1功率+發電機組2功率+發電機組3功率=負荷功率

本文約束條件可以表達為:
1.發電機組1成本曲線對功率求導 =發電機組2成本曲線對功率求導
2.發電機組1成本曲線對功率求導 =發電機組3成本曲線對功率求導
3.發電機組1功率+發電機組2功率+發電機組3功率=負荷功率

參數:
d1, d2, d3, d4, d5, d6 表示各發電機組成本曲線求導后的系數。
d7 為負荷功率

def 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 cons

主函數:
要定義一些數值=
等于說 前面在定義目標函數和約束時全用字母代替,不能出現具體數
。具體數在后面傳入。
x0 = np.array((100, 50, 100)) 定義x初始解
res.fun 目標函數值
res.success 是否求得值
res.x 未知數的值

if __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)

總結

以上是生活随笔為你收集整理的电网调度优化学习笔记:不考虑经济损耗的调度方式(算例代码求解)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。