我正在尝试解决一个具有动态约束的优化问题。这基本上是在创建一个车辆轨迹。最后三行通过每个步骤的状态来解释多个约束。我想用for循环创建这三条线。我该怎么做?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);
在MATLAB中,这是:
prob.Constraints.cons1 = ((x(1,1)-x0)/dt <= vmax);
与此相同:
name = 'cons1';
prob.Constraints.(name) = ((x(1,1)-x0)/dt <= vmax);
例如,可以使用sprintf
:创建变量name
name = sprintf('cons%d',index);
(当然,index
是约束的编号,可能是循环索引。(
我不知道你想如何生成约束,但你应该尽量避免eval
,因为它有安全隐患,而且效率很低。