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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python求非线性优化问题_用python优化非线性函数

發布時間:2023/12/4 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python求非线性优化问题_用python优化非线性函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我在python中有一個函數,如下所示:import numpy as np

def fun(Gp,Ra,Mr,Pot,Sp,Mc,Keep):

if(Keep==True):

return(Pot*np.tanh((Gp+Ra+Mr+ Mc)*Sp ))

假設以下數據:

^{2}$

我總共有100個GP,我想適當地分配它們

為了最大化objective_function:

在全部約束下,3個元素正

根據this的帖子,scipy.optimize將是一個好辦法,但我很困惑如何把問題寫下來

更新:我的嘗試from scipy.optimize import minimize

y = {'A': {'RA': 0.5, 'MR': 0.97, 'POT': 0.25, 'SP': 0.25, 'MC': MC_1, 'keep': True},

'B': {'RA': 0.8, 'MR': 0.95, 'POT': 0.12, 'SP': 0.12, 'MC': MC_2, 'keep': True},

'C': {'RA': 0.9, 'MR': 0.99, 'POT': 0.05, 'SP': 0.15, 'MC': MC_3, 'keep': True}}

def objective_function(x):

return(

-(fun(x[0], Ra=y['A']['RA'], Mr=y['A']['MR'],

Pot=y['A']['POT'], Sp=y['A']['SP'],

Mc=y['A']['MC'], Keep=y['A']['keep']) +

fun(x[1], Ra=y['B']['RA'], Mr=y['B']['MR'],

Pot=y['B']['POT'], Sp=y['B']['SP'],

Mc=y['B']['MC'], Keep=y['B']['keep']) +

fun(x[2], Ra=y['C']['RA'], Mr=y['C']['MR'],

Pot=y['C']['POT'], Sp=y['C']['SP'],

Mc=y['C']['MC'], Keep=y['C']['keep']))

)

cons = ({'type': 'ineq', 'fun': lambda x: x[0] + x[1] + x[2] - 100})

bnds = ((0, None), (0, None), (0, None))

minimize(objective_function, x0=[1,1,1], args=y, method='SLSQP', bounds=bnds,

constraints=cons)

現在的問題是我得到錯誤ValueError: Objective function must return a scalar,而fun函數的輸出是標量

更新2(在@Cleb comment之后)

現在我改變了函數:def objective_function(x,y):

temp = -(fun(x[0], Ra=y['A']['RA'], Mr=y['A']['MR'],

Pot=y['A']['POT'], Sp=y['A']['SP'],

Mc=y['A']['MC'], Keep=y['A']['keep']) +

fun(x[1], Ra=y['B']['RA'], Mr=y['B']['MR'],

Pot=y['B']['POT'], Sp=y['B']['SP'],

Mc=y['B']['MC'], Keep=y['B']['keep']) +

fun(x[2], Ra=y['C']['RA'], Mr=y['C']['MR'],

Pot=y['C']['POT'], Sp=y['C']['SP'],

Mc=y['C']['MC'], Keep=y['C']['keep']))

print("GP for the 1st: " + str(x[0]))

print("GP for the 2nd: " + str(x[1]))

print("GP for the 3rd: " + str(x[2]))

return(temp)

cons = ({'type': 'ineq', 'fun': lambda x: x[0] + x[1] + x[2] - 100})

bnds = ((0, None), (0, None), (0, None))

現在有兩個問題:

1x[0],x[1],x[2]的值非常接近x[0],x[1],x[2]的和超過100

總結

以上是生活随笔為你收集整理的python求非线性优化问题_用python优化非线性函数的全部內容,希望文章能夠幫你解決所遇到的問題。

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