如何在约束中返回两个变量(scipy.最小化)?

2024-05-14 06:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我正在用python研究一个优化问题。因此,我使用scipy.最小化. 我的优化问题的目标是利润最大化。利润来自水。因此,用于某一目标的水,不能用于其他用途。在我目前的模型中,水可以用于农业的水电生产。当然,不可能使用比可用水量更多的水。所以其中一个限制被称为可持续性限制。但是我在给约束添加两个变量时遇到了一些问题。有人能帮我吗。你知道吗

我目前的代码如下:

def constraint1(ETa, Qhydro)
   for j in range(0,Numbas):
    for i in range(0,Nummon):
        if (i-(j*Nummon))==0:
            ETa[i+(j*Nummon)+11]-((1-R[j])*S0[j])+S[i+(j*Nummon)]-P[i+(j*Nummon)+11]-Rdown[i+(j*Nummon)]+Qhydro[i+(j*Nummon)]
        else: 
            ETa[i+(j*Nummon)-1]-((1-R[j])*S[i+(j*Nummon)-1])+S[i+(j*Nummon)]-P[i+(j*Nummon)-1]-Rdown[i+(j*Nummon)]+Qhydro[i+(j*Nummon)]
    return ETa, Qhydro
con1=({'type':'eq','fun':constraint1})

这会产生以下错误:TypeError:约束1()正好接受给定的2个参数1。如何解决这个问题?你知道吗

我解决了问题如下。你知道吗

def constraint1(x)
S=x[0:36]
Qhydro=x[36:48]

这样,约束只需返回一个值即可工作:)


Tags: in模型目标fordefrangescipy用途