我想使用MatLab
解决CVXGEN
中的QP / LP问题。我优先选择CVXGEN
而不是CVX
,因为CVXGEN
要快得多。特别是,我想解决
min f(x) s.t. x in X
其中f(x)
是二次形式,X
是紧凑的,凸的,并由线性函数定义。问题的大小因运行而异。我想尽可能自动化程序。为了说明,CVXGEN
代码的示例是:
dimensions
n = 10
end
parameters
Q (n,n) psd # quadratic penalty.
end
variables
x (n)
end
minimize
quad(x, Q)
end
此代码在cvxgen.com
输入。在这个网站上,我可以生成C代码,它给我一个唯一的编号。然后我可以使用唯一编号将其编译为MEX代码。最后,我可以通过运行以下代码
csolve
)
n=10; % dimension of the problem
params.Q = eye(n,n); % assume that the Hessian is the identity
[vars, status] = csolve(params); % this outputs optimal x* = 0.
但是,此过程需要我要运行的问题n
的每个维度,我需要转到cvxgen.com
,更改n
,编译代码,然后运行我的MatLab
代码。是否可以让n
作为参数输入?这样,我只需要编译一次代码,然后在我的MatLab
代码集params.n = n
和params.Q = eye(n,n)
中编译,然后调用[vars, status] = csolve(params);
。
答案 0 :(得分:0)
简而言之,我认为不可能在cvxgen.com
上指定任意维度。我有一个解决方案:首先,在MatLab中,允许用户为cvxgen.com
指定他/她的电子邮件地址和密码。接下来,使用system
中的MatLab
命令,调用执行以下步骤的python
或javascript
程序:
1)将用户登录到cvxgen.com
2)转到网站上的edit
标签
3)复制并粘贴cvxgen
代码
4)转到generate c
标签
5)点击generate code
6)转到matlab
标签
7)复制要下载的已编译C代码的唯一标识号
8)将唯一识别号码传回MatLab
并通过拨打识别号码编译Mex
中的MatLab
个文件。
现在可以通过以下命令在Mex
中调用MatLab
个文件:
n=10; % dimension of the problem
params.Q = eye(n,n); % assume that the Hessian is the identity
[vars, status] = csolve(params); % this outputs optimal x* = 0.