首页 > 解决方案 > fmincon:优化 MPC 的问题

问题描述

我尝试使用经济型 MPC 进行城市交通(建模为状态空间系统),以控制十字路口的灯光。我fmincon用于优化。当我模拟它时,我发现fmincon每个采样时间运行不止一次:对于第一个采样时间,fmincon运行 32 次,控制值发生变化,Matlab 向我显示此消息:

初始点是满足约束的局部最小值。

优化完成是因为在初始点,目标函数在可行方向上不递减到最优容差的默认值内,并且约束满足在约束容差的默认值内。

停止条件详细信息

之后,fmincon运行 2 次,控制值与相同的 matlab 消息保持不变。我可以限制本次运行的次数吗?

标签: matlaboptimization

解决方案


好的,您混淆了几个主题:

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)因为算法首先需要在各个方向上的所有参数稍微摆动......


推荐阅读