Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在cvxpy中将变量堆叠在一起?_Python_Mathematical Optimization_Cvxpy - Fatal编程技术网

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])