Python 如何在cvxpy中将变量堆叠在一起?
我想使用Python 如何在cvxpy中将变量堆叠在一起?,python,mathematical-optimization,cvxpy,Python,Mathematical Optimization,Cvxpy,我想使用cvxpy解决一个优化问题。 假设我想使用log\u sum\u exp函数来构建如下约束: m >= log(1 + exp(m+z)) cvxpy的语法允许我创建维度2的向量变量x=[z,m],并应用矩阵乘法创建表达式向量0,z+m: import cvxpy x = cvxpy.Variable(2) coeff = np.array([ [0,0], [1,1] ]) constraints = [ x[1] >= cvxpy.log_sum_exp
cvxpy
解决一个优化问题。
假设我想使用log\u sum\u exp
函数来构建如下约束:
m >= log(1 + exp(m+z))
cvxpy
的语法允许我创建维度2
的向量变量x=[z,m]
,并应用矩阵乘法创建表达式向量0,z+m
:
import cvxpy
x = cvxpy.Variable(2)
coeff = np.array([
[0,0],
[1,1]
])
constraints = [ x[1] >= cvxpy.log_sum_exp(coeff * x)]
当这样编码时,我丢失了部分逻辑,因为我希望变量数组的不同部分有不同的名称。是否有更明确地使用log\u sum\u exp
转换的方法,如
z = cvxpy.Variable()
m = cvxpy.Variable()
constraints = [ m >= cvxpy.log_sum_exp([0, m+z]) ]
?
我在官方文件中找不到任何提示。谢谢 如前所述,手册的一页
包含答案。特别是,我可以给出一个使用log\u sum\u exp
而不使用矩阵乘法的示例。请注意,仅使用运算符exp
和log
不可能在DCP(严格的凸规划)框架内构造正确的问题,因为您将获得应用于凸函数的凹函数,这被视为未定义的行为。应该使用内置的构造函数
如果要对约束进行编码
F0 >= log( exp(F1) + exp(F2) + ... + exp(Fn) )
其中,F1
,F2
,…,Fn
是一些凸表达式,F0
是凹表达式,
然后,您可以输入
import cvxpy
... # Define variables and functions
constraints = [
...,
something >= cvxpy.log_sum_exp(
cvxpy.vstack(
F1,
F2,
...,
Fn
)
)
]
... # Solve the optimisation problem
请注意,vstack
可以在多参数样式中使用:
cvxpy.vstack(z, u)
和列表样式(但不是元组)
@没错,这可以通过键入
cvxpy.log\u sum\u exp(cvxpy.vstack(0,m+z))
来实现。我应该写一个单独的答案吗?我没有注意到手册的这一部分,谷歌搜索总是把我推到标题页。感谢您指出这一点。请随意添加一个连接到您的代码的答案!该函数概述是我使用cvxpy:-)时的转到页面。两年后,我再次搜索同一个问题,令人惊讶的是,找到了我自己的帖子,这很有帮助。
cvxpy.vstack([z,u])