matlab - 如何在 Matlab 中创建动态约束
问题描述
我正在尝试解决具有动态约束的优化问题。这基本上是在创建车辆轨迹。最后三行按每个步骤的状态解释了多个约束。我想使用 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);
name
例如,可以使用以下方法创建变量sprintf
:
name = sprintf('cons%d',index);
(当然index
是约束的数量,也许是循环索引。)
我不知道你想如何生成约束,但你应该尽量避免eval
,因为它是一个安全隐患而且效率很低。
推荐阅读
- janusgraph - Janusgraph - 如何将顶点分配给变量
- shell - 如何解决 Parsing expression Lexer error yq
- python - 使用 FastAPI 在请求中注入附加参数
- javascript - 使用 .forEach 时出现异步/等待问题
- json - vscode json文件
- ruby-on-rails - 文件中的葡萄 Swagger 描述
- apache-kafka - 如何使两个DC之间的kafka集群中的生产者幂等?
- javascript - 提交表单并验证 TOKEN JWT 后,再次加载 Vue JS 实例
- c# - 查看新用户加入电报频道时使用的链接
- laravel - Laravel可邮寄,实现ShouldQueue时数据不会传递给Blade