Как создать динамические ограничения в Matlab - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь решить проблему оптимизации с помощью динамических ограничений.Это в основном создание траектории транспортного средства.Последние три строки объясняют множественные ограничения состояниями каждого шага.Я хочу создать эти три строки, используя цикл.Как я могу это сделать?eval([ '...' num2str(i)]) = equation; не работает.

код выглядит следующим образом:

%% MILP
% create opt.problem (max.)
prob = optimproblem('ObjectiveSense','maximize');

% creat variables
x = optimvar('x', sim_time_opt, 'lowerbound', 0);

% set objective function (last location)
prob.Objective = x(sim_time_opt,1);

% set constraints
% vmax
prob.Constraints.cons1 = ((x(1,1)-x0)/dt <= vmax);
prob.Constraints.cons2 = ((x(2,1) - x(1,1)) / dt <= vmax);
prob.Constraints.cons3 = ((x(3,1) - x(2,1)) / dt <= vmax);

1 Ответ

0 голосов
/ 27 октября 2018

В MATLAB это:

prob.Constraints.cons1 = ((x(1,1)-x0)/dt <= vmax);

такой же, как этот:

name = 'cons1';
prob.Constraints.(name) = ((x(1,1)-x0)/dt <= vmax);

Переменная name может быть создана, например, с помощью sprintf:

name = sprintf('cons%d',index);

(Конечно, index - это номер ограничения, может быть, индекс цикла.)

Я не знаю, как вы хотите создать ограничения, но вы должны попытаться избежать eval, так как это является угрозой безопасности и очень неэффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...