matlab - fmincon:优化 MPC 的问题
问题描述
我尝试使用经济型 MPC 进行城市交通(建模为状态空间系统),以控制十字路口的灯光。我fmincon
用于优化。当我模拟它时,我发现fmincon
每个采样时间运行不止一次:对于第一个采样时间,fmincon
运行 32 次,控制值发生变化,Matlab 向我显示此消息:
初始点是满足约束的局部最小值。
优化完成是因为在初始点,目标函数在可行方向上不递减到最优容差的默认值内,并且约束满足在约束容差的默认值内。
停止条件详细信息
之后,fmincon
运行 2 次,控制值与相同的 matlab 消息保持不变。我可以限制本次运行的次数吗?
解决方案
好的,您混淆了几个主题:
MPC代表模型预测控制,这是一种控制技术,可以在定义的未来范围内解决每个样本点的优化问题(由此它隐含地确定控制律,因此您不需要进行讨厌的极点放置在拉普拉斯空间)。
不管怎样,你用它fmincon
来解决这个优化问题。如果您选择运行时(因此,如果它是一个真实控制器而不仅仅是一个模拟),这是一个糟糕的选择,因为您只有一个(可能受约束但)线性优化问题(如您所述的状态空间表示)。在这里查看 Matlab 文档,了解如何选择理想算法。对于真正的实现,我建议使用开源库NLopt,它提供了一个很好的 Matlab 接口并且通常运行得更快。
fmincon现在回答您的实际问题:可以限制目标函数的调用fmincon
吗?(请注意,您的术语“运行”令人困惑,因为它指的是优化的开始......就像在 MPC 中一遍又一遍地做的那样。但我猜你想说“目标函数的调用”)答案是肯定的。
opts = optimoptions('fmincon','MaxFunctionEvaluations',100);
[x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,opts)
没有代码,很难跟踪您的具体问题,但消息(和概率exitflag
)告诉您,您的初始值或目标函数很糟糕。fmincon
在您的参数空间中找不到方向,它可以逐步降低目标函数的值。引发此警告时的函数调用次数取决于参数的数量,length(x0)
因为算法首先需要在各个方向上的所有参数稍微摆动......
推荐阅读
- java - 同步异步后端
- r - 如何通过创建手段将r中的长数据集转换为宽数据集
- replace - 如何在 textwrangler 搜索和替换中添加行号?
- javascript - 如何从 Javascript 中的 url 获取 #pg= 值?
- python - 在 PyTorch 中在 CPU(而不是 GPU)上对深度模型进行基准测试的最佳实践?
- javascript - 是否有设置在 CRA 的 URL 末尾添加斜杠?
- c# - w[警告]没有找到测试结果文件 azure devops
- java - Mockito 问题:org.mockito.exceptions.misusing.InvalidUseOfMatchersException:预期 1 个匹配器,记录 2 个:
- javascript - html2canvas 不渲染由 CHARTIST.JS 生成的 SVG 图表
- javascript - Bootstrap 在内置角度项目中不起作用?