Python 带矩阵约束的scipy.optimize
关于矩阵约束Python 带矩阵约束的scipy.optimize,python,scipy,mathematical-optimization,Python,Scipy,Mathematical Optimization,关于矩阵约束Ax-b>=0,我如何告诉fmin_cobyla?它不会将其作为向量约束: cons = lambda x: dot(A,x)-b 谢谢。由于约束必须返回一个标量值,您可以这样动态定义标量约束: constraints = [] for i in range(len(A)): def f(x, i = i): return np.dot(A[i],x)-b[i] constraints.append(f) 例如,如果我们稍微修改 屈服 [-0.6
Ax-b>=0
,我如何告诉fmin_cobyla
?它不会将其作为向量约束:
cons = lambda x: dot(A,x)-b
谢谢。由于约束必须返回一个标量值,您可以这样动态定义标量约束:
constraints = []
for i in range(len(A)):
def f(x, i = i):
return np.dot(A[i],x)-b[i]
constraints.append(f)
例如,如果我们稍微修改
屈服
[-0.6 0.8]
另外,感谢@seberg指出了前面的一个错误。由于约束必须返回标量值,您可以这样动态定义标量约束:
constraints = []
for i in range(len(A)):
def f(x, i = i):
return np.dot(A[i],x)-b[i]
constraints.append(f)
例如,如果我们稍微修改
屈服
[-0.6 0.8]
另外,感谢@seberg指出了一个早期的错误。实际上,文档中说的是
约束函数代码>,它只需要一个函数列表,每个函数只返回一个值
因此,如果您想一次完成这一切,也许只需修改fmin_cobyla
的纯python代码,您会发现它在函数周围定义了一个包装函数,因此很容易。。。不管怎么说,python代码确实很短,只是围绕着scipy.optimize.\u cobyal.minimize
的小包装
另一方面,如果要优化的函数与约束一样是线性(或二次)的,那么可能会有更好的解算器。实际上,文档中说的是约束函数代码>,它只需要一个函数列表,每个函数只返回一个值
因此,如果您想一次完成这一切,也许只需修改fmin_cobyla
的纯python代码,您会发现它在函数周围定义了一个包装函数,因此很容易。。。不管怎么说,python代码确实很短,只是围绕着scipy.optimize.\u cobyal.minimize
的小包装
另一方面,如果要优化的函数与约束一样是线性(或二次)的,那么可能会有更好的解算器