cvxpy
有一种非常简洁的方式来写出优化形式,而不必担心将其转换为“标准”矩阵形式,因为这是在内部完成的。最好用一个例子来解释:
def cvxpy_implementation():
var1 = cp.Variable()
var2 = cp.Variable()
constraints = [
var1 <= 3,var2 >= 2
]
obj_fun = cp.Minimize(var1**2 + var2**2)
problem = cp.Problem(obj_fun,constraints)
problem.solve()
return var1.value,var2.value
def scipy_implementation1():
A = np.diag(np.ones(2))
lb = np.array([-np.inf,2])
ub = np.array([3,np.inf])
con = LinearConstraint(A,lb,ub)
def obj_fun(x):
return (x**2).sum()
result = minimize(obj_fun,[0,0],constraints=con)
return result.x
def scipy_implementation2():
con = [
{'type': 'ineq','fun': lambda x: 3 - x[0]},{'type': 'ineq','fun': lambda x: x[1] - 2},]
def obj_fun(x):
return (x**2).sum()
result = minimize(obj_fun,constraints=con)
return result.x
以上所有方法都给出了正确的结果,但是cvxpy实现要写起来更“容易”,特别是我不必担心不等式,并且可以在写出不等式时命名有用的变量。将其与scipy1和scipy2实现进行比较,在第一种情况下,我必须写出这些额外的inf
,在第二种情况下,我必须记住哪个变量是哪个。您可以想象有一个变量,其中有100个变量,而最终需要将它们连接起来,我希望能够像在cvxpy中那样将其写出。
问题: 有没有人实施这项技术?还是有其他库可以完成这项工作?
谢谢