Я хотел бы решить проблему QP/LP в MatLab
с использованием CVXGEN
. Я предпочитаю CVXGEN
за CVX
, так как CVXGEN
намного быстрее. В частности, я хотел бы решитьПроизвольный размер для программы 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-код, используя уникальный номер. Наконец, я могу назвать этот MEX код (csolve
) из 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.
Эта процедура требует, однако, для каждой размерности задачи n
, что я хочу работать, мне нужно ехать в cvxgen.com
, измените n
, скомпилируйте код, затем запустите мой код MatLab
. Можно ли ввести параметр n
в качестве параметра? Таким образом, мне нужно только скомпилировать код один раз, затем в моем MatLab
код params.n = n
и params.Q = eye(n,n)
, а затем позвонить [vars, status] = csolve(params);
.