MATLAB运行所有LINPROG算法(是否有算法的MATLAB列表?)



matlab提供了多种用于求解线性程序的算法。例如MATLAB R2012b提供:" Active-Set"," Trust-Region-Refractive"," Interior Point"," Interior Point-convex"," Levenberg-Marquardt"," Trust-drigne-digogleg','lm-line-search'或'sqp'。

但是其他版本的MATLAB支持不同的算法。

我想在用户MATLAB-VERSION支持的所有算法上运行一个循环。我希望他们像Matlab的推荐顺序一样被订购。

我想实现这样的事情:

i=1;
x=[];
while (isempty(x))
    options=optimset(options,'Algorithm',Here_I_need_a_list_of_Algorithms(i))
    x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options);
end

在99%中,此代码应等于

x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options);

,但有时由于数值问题(Exitflag -4(,该算法还会回馈一个空数组。如果其他一种算法之一可以找到解决方案,我也想尝试它们。

所以我的问题是:是否有可能自动获取所有linprog-algorithms的列表,这些列表像MATLAB一样被订购的已安装的MATLAB转换支持。

我认为在所有算法中循环也可以在其他情况下有意义。例如,当您需要非常精确的数据并且有很多时间时,您可以全部运行它们并评估给出最佳结果。或者,一个人希望通过所有算法循环,如果想找到哪种算法是具有一定结构的LP的最佳方法。

据我所知,没有自动方法可以做到这一点。如果您真的想这样做,那么最简单的事情就是转到在线文档,并检查以前的版本(在线文档可用于旧版本,而不仅仅是最近的版本(,并构建一些类似这样的变量:

r2012balgos = {'active-set', 'trust-region-reflective', 'interior-point', 'interior-point-convex', 'levenberg-marquardt', 'trust-region-dogleg', 'lm-line-search', 'sqp'};
...
r2017aalgos = {...};
v = ver('matlab');
switch v.Release
    case '(R2012b)'
        algos = r2012balgos;
    ....
    case '(R2017a)'
        algos = r2017aalgos;
end
% loop through each of the algorithms

似乎很无聊,但是只需要大约30分钟。

有一个原因,Mathworks并不像您希望的那样容易,因为您要想要的不是一个好主意。

可以构建一种算法找到解决方案而其他算法没有的人造问题。但是实际上,通常,如果建议的算法找不到解决方案,这并不表示您应该切换算法,则表明您的问题没有很好地构型,您应该考虑修改它,也许通过修改某些约束来进行修改,或重新设计目标功能。

毕竟,为什么要停止循环浏览替代算法?为什么不为其他选项(例如约束公差,最佳公差,最大功能评估数量等(循环循环大量值?这些可能与算法的选择一样多的可能性。很快,您正在运行一种优化算法,以浏览原始优化的元参数空间。

这不是一个很好的计划 - 最好选择一种推荐的算法之一,坚持下去,如果事情不起作用,请专注于改善您对问题的表述,而不是过度对优化本身。

最新更新