gpt4 book ai didi

python - scipy.optimize 紧凑约束

转载 作者:太空宇宙 更新时间:2023-11-04 05:22:42 24 4
gpt4 key购买 nike

我有一个长度为 9 的 np.array A,它是目标函数中的变量。

A =  [ a1, a2, a3,
b1, b2, b3,
c1, c2, c3], where a1...c3 are real numbers.
with constraints: a1 > a2, a2 > a3,
b1 > b2, b2 > b3,
c1 > c2, c2 > c3

有没有简单的方法来写约束?目前我有以下代码,但是随着数组变大,很难全部写出来。

cons = (
{'type':'ineq',
'fun': lambda x : np.array([x[0]-x[1]])
}
,
{'type':'ineq',
'fun': lambda x : np.array([x[1]-x[2]])
}
,
{'type':'ineq',
'fun': lambda x : np.array([x[3]-x[4]])
}
,
{'type':'ineq',
'fun': lambda x : np.array([x[4]-x[5]])
}
,
{'type':'ineq',
'fun': lambda x : np.array([x[6]-x[7]])
}
,
{'type':'ineq',
'fun': lambda x : np.array([x[7]-x[8]])
}
)

最佳答案

显然,您的约束是 A 的每一列都应该(按元素)大于或等于其右侧的列。

您可以按如下方式制定单个矢量输出约束:

def cons_fun(x):
A = x.reshape(3,3) # change "(3,3)" according to the dimensions of A

return np.array([A[:,i]-A[:,i+1] for i in range(3-1)]).ravel() # change "3" accordingly

cons = ({'type':'ineq',
'fun' : cons_fun},)

根据我使用 SLSQP 的经验,向量输出约束比提供多个标量输出约束导致优化时间更快。

关于python - scipy.optimize 紧凑约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39797606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com