【发布时间】:2014-08-15 07:57:40
【问题描述】:
我是 scipy.optimize 模块的新手。我正在使用它的最小化函数试图找到一个 x 来最小化一个多元函数,该函数接受矩阵输入但返回一个标量值。我有一个等式约束和一个不等式约束,都采用向量输入和返回向量值。特别是,这里是约束列表:
sum(x) = 1 ;
AST + np.log2(x) >= 0
其中AST 只是一个参数。我将约束函数定义如下:
对于等式约束:lambda x: sum(x) - 1
对于不等式约束:
def asset_cons(x):
#global AST
if np.logical_and.reduce( (AST + np.log2(x)) >= 0):
return 0.01
else:
return -1
然后我打电话
cons = ({'type':'eq', 'fun': lambda x: sum(x) - 1},
{'type':'ineq', 'fun': asset_cons})
res = optimize.minize(test_obj, [0.2, 0.8], constraints = cons)
但我仍然收到错误,抱怨我的约束功能。是否允许为约束函数返回向量值,或者我必须返回一个标量才能使用这个最小化函数?
谁能帮我看看我指定约束的方式是否有问题?
【问题讨论】:
-
请发布确切的错误和
asset_cons的代码,可能会重现问题。
标签: python scipy constraints mathematical-optimization minimize