2016-09-29 7 views
1

Я хотел бы решить проблему 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);.

ответ

0

Короче говоря, я не думаю, что можно указать произвольное измерение на cvxgen.com. У меня есть одно решение: во-первых, в MatLab, разрешите пользователю указать свой адрес и пароль для cvxgen.com. Далее, используя system команду в MatLab, вызовите программу python или javascript, которая выполняет следующие действия:

1) пользователя Войдите в cvxgen.com

2) Перейти edit вкладку на сайте

3) Скопируйте и вставьте cvxgen код

4) Goto generate c вкладка

5) Нажмите generate code

6) Goto 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. 

 Смежные вопросы

  • Нет связанных вопросов^_^