最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python解決非線性規(guī)劃中經(jīng)濟調(diào)度問題

 更新時間:2022年05月05日 15:33:37   作者:電力系統(tǒng)與算法之美  
Scipy是Python算法庫和數(shù)學(xué)工具包,包括最優(yōu)化、線性代數(shù)、積分、插值、特殊函數(shù)、傅里葉變換等模塊。scipy.optimize模塊中提供了多個用于非線性規(guī)劃問題的方法,適用于不同類型的問題。本文將利用起解決經(jīng)濟調(diào)度問題,感興趣的可以了解一下

1、概述

今天重點講非線性規(guī)劃中scipy.optimize.minize庫在非線性規(guī)劃中的應(yīng)用。Scipy 是 Python 算法庫和數(shù)學(xué)工具包,包括最優(yōu)化、線性代數(shù)、積分、插值、特殊函數(shù)、傅里葉變換、信號和圖像處理、常微分方程求解等模塊。 

scipy.optimize 模塊中提供了多個用于非線性規(guī)劃問題的方法,適用于不同類型的問題。

brent():單變量無約束優(yōu)化問題,混合使用牛頓法/二分法。

fmin():多變量無約束優(yōu)化問題,使用單純性法,只需要利用函數(shù)值,不需要函數(shù)的導(dǎo)數(shù)或二階導(dǎo)數(shù)。

leatsq():非線性最小二乘問題,用于求解非線性最小二乘擬合問題。

minimize():約束優(yōu)化問題,使用拉格朗日乘子法將約束優(yōu)化轉(zhuǎn)化為無約束優(yōu)化問題。

2、scipy.optimize.minimize參數(shù)

scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)

解釋:

  • fun: 求最小值的目標(biāo)函數(shù)
  • x0:變量的初始猜測值,如果有多個變量,需要給每個變量一個初始猜測值。minimize是局部最優(yōu)的解法,所以
  • args:常數(shù)值,后面demo會講解,fun中沒有數(shù)字,都以變量的形式表示,對于常數(shù)項,需要在這里給值
  • method:求極值的方法,官方文檔給了很多種。一般使用默認(rèn)。每種方法我理解是計算誤差,反向傳播的方式不同而已,這塊有很大理論研究空間
  • constraints:約束條件,針對fun中為參數(shù)的部分進行約束限制

3、簡單案例引出

(1)Scipy.optimize實現(xiàn)

import numpy as np
from scipy.optimize import minimize
#目標(biāo)函數(shù)
def fun(args1):
    a,b,c,d=args1
    r=lambda x:(a*x[0]*x[0]+b*x[1]*x[1]+c*x[2]*x[2]+d)
    return r
def con(args2):
    x0min,x1min,x2min=args2
    cons=({'type':'eq','fun':lambda x:-x[0]-x[1]**2+2},
          {'type':'eq','fun':lambda x:x[1]+2*x[2]**2-3},
          {'type':'ineq','fun':lambda x:x[0]**2-x[1]+x[2]**2},
          {'type': 'ineq', 'fun': lambda x: -(x[0]+x[1]**2+x[2]**2-20)},
          {'type':'ineq','fun':lambda x:x[0]-x0min},
          {'type':'ineq','fun':lambda x:x[1]-x1min},
          {'type':'ineq','fun':lambda x:x[2]+x2min})
    return cons
def main():
    args1=(1,2,3,8)
    args2=(0,0,0)
    cons=con(args2)
    x0=np.array((1,2,3))    #初值
    res=minimize(fun(args1),x0,method='SLSQP',constraints=cons)
    print('minf(x):',res.fun)
    print(res.success)
    print('x:',[np.around(i) for i in res.x])
    print('x1:',res.x[0])
    print('x2:',res.x[1])
    print('x3:',res.x[2])
    #另一種表述
    print("optimization problem(res):{}".format(res.x))
    print("Xopt={}".format(res.x))
    print("minf(x)={:.4f}".format(res.fun))
 
if __name__ == "__main__":
    main()

輸出結(jié)果

minf(x): 13.878994794551044
True
x: [1.0, 1.0, 1.0]
x1: 0.6743061260520056
x2: 1.1513878035150682
x3: 0.961408393062538
optimization problem(res):[0.67430613 1.1513878  0.96140839]
Xopt=[0.67430613 1.1513878  0.96140839]
minf(x)=13.8790
 
Process finished with exit code 0

(2)遺傳算法包實現(xiàn) (—sko.GA&sko.DE)

#from sko.DE import DE   #差分進化法
from sko.GA import GA   #遺傳算法
def obj_func(p):
    x1, x2, x3 = p
    return x1 ** 2 + 2*x2 ** 2 + 3*x3 ** 2+8
 
 
constraint_eq = [
    lambda x: -x[0]-x[1]**2+2,
    lambda x: x[1]+2*x[2]**2-3
]
 
constraint_ueq = [
    lambda x: -x[0]**2+x[1]-x[2]**2,
    lambda x: x[0]+x[1]**2+x[2]**2-20
]
 
#de = DE(func=obj_func, n_dim=3, size_pop=50, max_iter=800, lb=[0, 0, 0],constraint_eq=constraint_eq, constraint_ueq=constraint_ueq)
ga = GA(func=obj_func, n_dim=3, size_pop=50, max_iter=800, lb=[0, 0, 0],
        constraint_eq=constraint_eq, constraint_ueq=constraint_ueq)
 
 
#best_x, best_y = de.run()
best_x, best_y = ga.run()
print('best_x:', best_x, '\n', 'best_y:', best_y)

輸出結(jié)果

best_x: [1. 1. 1.] 
 best_y: [14.]
 
Process finished with exit code 0

4、電力系統(tǒng)中應(yīng)用——經(jīng)濟調(diào)度

(1)案例

(2)Scipy.optimize實現(xiàn) 

import numpy as np
from scipy.optimize import minimize
#目標(biāo)函數(shù)(FG1+FG2+FG3)
def fun(args1):
    a0,a1,a2,b0,b1,b2,c0,c1,c2=args1
    v=lambda x:(a0+a1*x[0]+a2*x[0]*x[0]
                +b0+b1*x[1]+b2*x[1]*x[1]
                +c0+c1*x[2]+c2*x[2]*x[2])
    return v
def con(args2):
    D,x0min,x0max,x1min,x1max,x2min,x2max=args2
    cons=({'type':'eq','fun':lambda x:D-x[0]-x[1]-x[2]},
          {'type':'ineq','fun':lambda x:x[0]-x0min},
          {'type':'ineq','fun':lambda x:-x[0]+x0max},
          {'type':'ineq','fun':lambda x:x[1]-x1min},
          {'type':'ineq','fun':lambda x:-x[1]+x1max},
          {'type':'ineq','fun':lambda x:x[2]-x2min},
          {'type':'ineq','fun':lambda x:-x[2]+x2max})
    return cons
def main():
    args1=(4,0.3,0.0007,3,0.32,0.0004,3.5,0.3,0.00045)
    args2=(700,100,200,120,250,150,300)
    cons=con(args2)
    x0=np.array((150,250,200))    #初值
    res=minimize(fun(args1),x0,method='SLSQP',constraints=cons)
    print('FGi-代價:',res.fun)
    print(res.success)
    print('PGi—解:',[np.around(i) for i in res.x])
    print('PG1:',res.x[0])
    print('PG2:',res.x[1])
    print('PG3:',res.x[2])
 
if __name__ == "__main__":
    main()

輸出結(jié)果

FGi-代價: 305.9673913046252
True
PGi—解: [176.0, 250.0, 274.0]
PG1: 176.0874477123534
PG2: 250.0
PG3: 273.9125522876465
 
Process finished with exit code 0

(3)粒子群包實現(xiàn)(pyswarm)

pyswarm是一個支持帶約束的粒子群優(yōu)化包,sko.PSO中的pso僅支持帶上下限的約束,不支持等式和不等式約束,所以不太喜歡。

from pyswarm import pso
 
def object_func(x):
    return (4+0.3*x[0]+0.0007*x[0]*x[0]+3+0.32*x[1]+0.0004*x[1]*x[1]+3.5+0.3*x[2]+0.00045*x[2]*x[2])
 
#不等式約束
 
def cons1(x):
    return [x[0]+x[1]+x[2]-700]
 
lb = [100, 120, 150]#
ub = [200, 250, 300]
 
xopt, fopt = pso(object_func,lb,ub,ieqcons=[cons1], maxiter=100,swarmsize=1000)
print(xopt)
print(fopt)

輸出結(jié)果

Stopping search: Swarm best objective change less than 1e-08
[179.34039956 250.         270.65960045]
305.97956393103044
 
Process finished with exit code 0

以上就是Python解決非線性規(guī)劃中經(jīng)濟調(diào)度問題的詳細(xì)內(nèi)容,更多關(guān)于Python 非線性規(guī)劃的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python畫圖常用命令大全(詳解)

    Python畫圖常用命令大全(詳解)

    這篇文章主要介紹了Python畫圖常用命令大全,內(nèi)容包括,matplotlib庫默認(rèn)英文字體,讀取exal方法,論文圖片的類型和格式,柱狀圖擴展等知識,需要的朋友可以參考下
    2021-09-09
  • Python?設(shè)計模式中命令模式

    Python?設(shè)計模式中命令模式

    這篇文章主要介紹了Python?設(shè)計模式中的命令模式,命令模式的目的是解耦調(diào)用操作的對象和提供實現(xiàn)的對象,下文介紹具有一定參考價值,需要的小伙伴可以參考一下
    2022-02-02
  • Python四款GUI圖形界面庫介紹

    Python四款GUI圖形界面庫介紹

    這篇文章介紹了Python的四款GUI圖形界面庫,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • python 安裝庫幾種方法之cmd,anaconda,pycharm詳解

    python 安裝庫幾種方法之cmd,anaconda,pycharm詳解

    在python項目開發(fā)的過程中,需要安裝大大小小的庫,本文會提供幾種安裝庫的方法,通過實例截圖給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下
    2020-04-04
  • scrapy與selenium結(jié)合爬取數(shù)據(jù)(爬取動態(tài)網(wǎng)站)的示例代碼

    scrapy與selenium結(jié)合爬取數(shù)據(jù)(爬取動態(tài)網(wǎng)站)的示例代碼

    這篇文章主要介紹了scrapy與selenium結(jié)合爬取數(shù)據(jù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python實現(xiàn)的讀取電腦硬件信息功能示例

    Python實現(xiàn)的讀取電腦硬件信息功能示例

    這篇文章主要介紹了Python實現(xiàn)的讀取電腦硬件信息功能,結(jié)合實例形式分析了Python基于wmi庫讀取電腦CPU、磁盤、網(wǎng)絡(luò)、進程等硬件信息相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • python操作XML格式文件的一些常見方法

    python操作XML格式文件的一些常見方法

    最近有同學(xué)詢問如何利用Python處理xml文件,特此整理一篇比較簡潔的操作手冊,下面這篇文章主要給大家介紹了關(guān)于python操作XML格式文件的一些常見方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 如何利用python正確地為圖像添加高斯噪聲

    如何利用python正確地為圖像添加高斯噪聲

    這篇文章主要給大家介紹了關(guān)于如何利用python正確地為圖像添加高斯噪聲的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Pytorch環(huán)境搭建與基本語法

    Pytorch環(huán)境搭建與基本語法

    這篇文章主要介紹了Pytorch環(huán)境搭建與基本語法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Keras搭建分類網(wǎng)絡(luò)平臺VGG16?MobileNet?ResNet50

    Keras搭建分類網(wǎng)絡(luò)平臺VGG16?MobileNet?ResNet50

    這篇文章主要為大家介紹了Keras搭建分類網(wǎng)絡(luò)平臺VGG16?MobileNet?ResNet50,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論

宝山区| 济南市| 五指山市| 玉山县| 三门峡市| 峨山| 榆社县| 清水河县| 宁波市| 中山市| 南木林县| 贵阳市| 易门县| 沅江市| 淮北市| 务川| 上虞市| 栾城县| 琼结县| 长寿区| 双城市| 清流县| 长白| 张掖市| 金湖县| 封丘县| 五河县| 津市市| 大渡口区| 嵩明县| 策勒县| 馆陶县| 罗源县| 凌源市| 阳朔县| 闸北区| 高要市| 衢州市| 兴业县| 广德县| 东兰县|